2014-04-01 3 views
0

В Java можно создать HashMap, который использует ссылочное равенство вместо метода equals()?Сбор с использованием ссылочного равенства

+1

Вы можете реализовать свои собственные :) –

+0

Вы имеете в виду использование == для достижения равенства содержания? –

+0

Вы говорите о равенстве самой «Карты» или ее элементов? – Paul

ответ

5

Используйте IdentityHashMap класс. Это вариант HashMap, в котором используются == и System.identityHashCode() вместо Object.equals(Object) и Object.hashCode().

Обратите внимание, что этот класс преднамеренно нарушает договор API из java.util.Map, который требует, что ключ равенство основано на equals(Object).

+0

в качестве поправки, http://docs.oracle.com/javase/7/docs/api/java/util/IdentityHashMap.html – chiccodoro

+0

Эй, ребята, что с отрешенным исступлением? –

+0

Вы видите - я не решался редактировать, я предпочел дать вам ссылку в качестве комментария - хотя редактирование отлично o.k. в StackOverflow, и я думаю, что «ребята» не сделали ничего грубого ответа. – chiccodoro

1

Вы можете переопределить метод equals объектов, которые вы вставляете в HashMap, для проверки равенства ссылок.

Как и в:

public boolean equals(Object obj) { 
    return this == obj; 
} 
1

Класс IdentityHashmap поставляется со стандартной Java. Из JavaDoc:

Этот класс реализует интерфейс карты с помощью хеш-таблицы, используя для сравнения ключей (и значений) равенство-равенство вместо равенства объектов. Другими словами, в IdentityHashMap два ключа k1 и k2 считаются равными тогда и только тогда (k1 == k2). (В обычных реализациях Карта (как HashMap) два ключа k1 и k2 считаются равными, если и только если (k1 == NULL k2 == NULL:?. K1.equals (k2)))

Имейте в виду, что многие функции, которые принимают Map, делают это, полагая, что они будут использовать equals, а не ссылочное равенство. Поэтому будьте осторожны, какие функции вы передаете IdentityHashmap.

 Смежные вопросы

  • Нет связанных вопросов^_^