Руководство по Java Core. Коллекции. IdentityHashMap.

Класс IdentityHashMap является реализацией абстрактного класса AbstractMap. Его отличие от HashMap состоит в том, что при сравнении элементов используется сравнение ссылок, а не значений.

При сравнении не используется класс equals(). Этот класс обеспечивает постоянное время для операция добавления и получения элемента и формирует хэш-код с помощью метода Systen.identityHashCode(Object).

С конструкторами и мтеодами этого класса вы можете ознакомиться в официальной документации.

Для понимания того, как это работает на практике, рассмотрим пример простого приложения.

Пример:

Класс IdentityHashMapDemo


import java.util.IdentityHashMap;
import java.util.Map;
import java.util.Set;

public class IdentityHashMapDemo {
    public static void main(String[] args) {
        IdentityHashMap identityHashMap = new IdentityHashMap<>();

        System.out.println("Adding elements into IdentityHashMap...");
        identityHashMap.put(3, "Proselyte");
        identityHashMap.put(2, "AsyaSmile");
        identityHashMap.put(5, "Konstantin");
        identityHashMap.put(1, "Ivan");
        identityHashMap.put(4, "Peter");

        System.out.println("Initial identityHashMap content:");
        Set set = identityHashMap.entrySet();

        for (Object element : set) {
            Map.Entry mapEntry = (Map.Entry) element;
            System.out.println("ID: " + mapEntry.getKey() + ", Name: " + mapEntry.getValue());
        }

        System.out.println("\n================================\n");

        System.out.println("Modifying Proselyte...");
        String name = identityHashMap.get(3);
        name += " Changed";
        identityHashMap.put(3, name);

        System.out.println("\n================================\n");

        System.out.println("Initial identityHashMap content:");
        set = identityHashMap.entrySet();

        for (Object element : set) {
            Map.Entry mapEntry = (Map.Entry) element;
            System.out.println("ID: " + mapEntry.getKey() + ", Name: " + mapEntry.getValue());
        }

        System.out.println("\n================================\n");
    }
}

В результате работы программы мы получим следующий результат:


/*Some System Messages*/

Adding elements into IdentityHashMap...
Initial identityHashMap content:
ID: 5, Name: Konstantin
ID: 1, Name: Ivan
ID: 2, Name: AsyaSmile
ID: 4, Name: Peter
ID: 3, Name: Proselyte

================================

Modifying Proselyte...

================================

Initial identityHashMap content:
ID: 5, Name: Konstantin
ID: 1, Name: Ivan
ID: 2, Name: AsyaSmile
ID: 4, Name: Peter
ID: 3, Name: Proselyte Changed

================================

В этом разделе мы изучили основы класса IdentityHashMap и рассмотрели пример простого приложения с его использованием.