Класс IdentityHashMap реализует AbstractMap. Он похож на HashMap, за исключением того, что при сравнении элементов используется ссылочное равенство.

Этот класс не является реализацией Map общего назначения. Хотя этот класс реализует интерфейс Map, он намеренно нарушает общий контракт Map, который предусматривает использование метода equals при сравнении объектов.

Этот класс предназначен для использования только в редких случаях, когда требуется семантика ссылочного равенства. Этот класс обеспечивает постоянную производительность для основных операций (get и put), предполагая, что хэш-функция идентификатора системы (System.identityHashCode (Object)) правильно распределяет элементы среди бакетов. Этот класс имеет один параметр настройки (который влияет на производительность, но не на семантику): ожидаемый максимальный размер. Этот параметр является максимальным количеством отображений ключ-значение, которые предполагается сохранить в Map.

Конструкторы

Ниже приведен список конструкторов, поддерживаемых IdentityHashMap.

Конструктор и описание
1IdentityHashMap()
Этот конструктор создает новый, пустой IdentityHashMap с ожидаемым максимальным размером по умолчанию (21).
2IdentityHashMap(int expectedMaxSize)
Этот конструктор создает новый пустой IdentityHashMap с указанным ожидаемым максимальным размером.
3IdentityHashMap(Map m)
Этот конструктор создает новый IdentityHashMap, содержащую отображения ключ-значение в указанном Map.

Методы

Помимо методов, унаследованных от родительских классов, IdentityHashMap определяет следующие методы:

Методы и описание
1void clear()
Удаляет все отображения из этого Map.
2Object clone()
Возвращает мелкую копию этой хэш-карты идентичности: сами ключи и значения не клонируются.
3boolean containsKey(Object key)
Проверяет, является ли указанная ссылка объекта ключом в этой хэш-карте идентичности.
4boolean containsValue(Object value)
Проверяет, является ли заданная ссылка объекта значением в этой хэш-карте идентичности.
5Set entrySet()
Возвращает Set вид отображений, содержащихся в этом Map.
6boolean equals(Object o)
Сравнивает указанный объект с этим Map.
7Object get(Object key)
Возвращает значение, для которого указанный ключ отображается в этой хэш-карте идентификатора, или null, если карта не содержит отображения для этого ключа.
8int hashCode()
Возвращает значение хэш-кода для этой карты.
9boolean isEmpty()
Возвращает true, если эта хэш-карта идентичности не содержит отображений ключ-значение.
10Set keySet()
Возвращает вид, основанный на идентичности, ключей, содержащихся в этом Map.
11Object put(Object key, Object value)
Связывает указанное значение с указанным ключом в этой хэш-карте идентификации.
12void putAll(Map t)
Копирует все отображения с указанной карты на эту карту. Эти отображения заменят любые отображения, которые это отображение имело для любого из ключей, находящихся в настоящее время на указанной карте.
13Object remove(Object key)
Удаляет отображение этого ключа из этого Map, если оно присутствует.
14int size()
Возвращает количество отображений ключ-значение на этом Map.
15Collection values()
Возвращает представление (вид) коллекции значений, содержащихся на этом Map.

Пример

Следующая программа демонстрирует работу нескольких методов, поддерживаемых коллекцией IdentityHashMap в Java:

import java.util.*;
public class IdentityHashMapDemo {

   public static void main(String args[]) {
      // Создаём хэш-карту
      IdentityHashMap ihm = new IdentityHashMap();
 
      // Помещаем элементы в карту
      ihm.put("Зарина", new Double(3434.34));
      ihm.put("Марк", new Double(123.22));
      ihm.put("Андрей", new Double(1378.00));
      ihm.put("Денис", new Double(99.22));
      ihm.put("Михаил", new Double(-19.08));
      
      // Получаем вид элементов
      Set set = ihm.entrySet();
      
      // Получаем итератор
      Iterator i = set.iterator();
      
      // Отображаем элементы
      while(i.hasNext()) {
         Map.Entry me = (Map.Entry)i.next();
         System.out.print(me.getKey() + ": ");
         System.out.println(me.getValue());
      }
      System.out.println();
      
      // Вносим 1000 на счёт Зарины
      double balance = ((Double)ihm.get("Зарина")).doubleValue();
      ihm.put("Зарина", new Double(balance + 1000));
      System.out.println("Новый баланс Зарины: " + ihm.get("Зарина"));
   }
}

Получим следующий результат:

Андрей: 1378.0
Михаил: -19.08
Марк: 123.22
Денис: 99.22
Зарина: 3434.34

Новый баланс Зарины: 4434.34

Оглавление