Вставка целых чисел в TreeMap - PullRequest
2 голосов
/ 28 июня 2011

Я хочу сохранить идентификаторы предметов и соответствующие им координаты. Для этого я использую TreeMap, где Coordinates - это класс, содержащий int x и int y. Теперь для вставки данных в карту можно написать:

treeMapObject.put(5,new BasicRow(30,90));

Или я должен написать:

treeMapObject.put(new Integer(5),new BasicRow(30,90));

Полагаю, только второй верен, потому что Карты имеют дело с объектами. Но теперь вопрос, скажем, у меня есть следующий кусок кода:

treeMapObject.put(new Integer(5),new BasicRow(30,90));
treeMapObject.put(new Integer(5),new BasicRow(45,85));

В таком случае что будет?

Ответы [ 3 ]

7 голосов
/ 28 июня 2011

на самом деле обе версии верны, потому что ваш компилятор Java выполнит для вас то, что называется «автобоксом»: если вы предоставите int, где требуется Integer, java автоматически обернет это int в объект Integer.Это работает и наоборот (было введено в Java 5. Если вы используете более старую версию Java, которая не должна даже компилироваться.).

Для вашего второго вопроса: Запись, которую вы добавили первой, будетперезаписаны.

1 голос
/ 28 июня 2011

Янки прав, оба будут работать, потому что Java будет autobox целочисленных значений в Integer объект.

Обратите внимание, что если вы хотите сделать это явно, лучше написать:

Integer a = Integer.valueOf(5);

вместо:

Integer a = new Integer(5);

Если вы используете valueOf, тогда класс Integer может избежать создания нового объекта Integer, он вернет существующий объект Integer из своего внутреннего кэша, что более эффективно, чем создание нового объекта .

0 голосов
/ 28 июня 2011

Есть небольшая разница, которая не влияет на поведение карты.В обоих случаях, если вы попытаетесь получить значение для целого числа 5, карта вернет эту базовую строку.

Разница: вторая строка всегда создает новый экземпляр Integer в то время как первый может вставить существующий экземпляр.Но карты сравниваются по равенству , а не по идентичности , так что на самом деле это не имеет значения.Просто первая строка имеет (очень) небольшое положительное влияние на потребление памяти.

...