Java: la classe IdentityHashMap

Questa classe implementa AbstractMap. È simile a HashMap tranne per il fatto che utilizza l'uguaglianza dei riferimenti quando si confrontano gli elementi.

Questa classe non è un'implementazione della mappa generica. Sebbene questa classe implementi l'interfaccia Map, viola intenzionalmente il contratto generale di Map, che impone l'uso del metodo equals quando si confrontano gli oggetti.

Questa classe è progettata per essere utilizzata solo nei rari casi in cui è richiesta la semantica di uguaglianza dei riferimenti. Questa classe fornisce prestazioni a tempo costante per le operazioni di base (get and put), assumendo che la funzione hash dell'identità del sistema (System.identityHashCode (Object)) disperda gli elementi correttamente tra i bucket.

Questa classe ha un parametro di ottimizzazione (che influisce sulle prestazioni ma non sulla semantica): dimensione massima prevista. Questo parametro è il numero massimo di mappature valore-chiave che la mappa dovrebbe contenere.

Di seguito è riportato l'elenco dei costruttori supportati da IdentityHashMap.

Sr.No. Costruttore e descrizione
1

IdentityHashMap()

Questo costruttore costruisce una nuova mappa hash di identità vuota con una dimensione massima prevista predefinita (21).

2

IdentityHashMap(int expectedMaxSize)

Questo costruttore costruisce una nuova IdentityHashMap vuota con la dimensione massima prevista specificata.

3

IdentityHashMap(Map m)

Questo costruttore costruisce una nuova mappa hash identità contenente le mappature valore-chiave nella mappa specificata.

Oltre ai metodi ereditati dalle sue classi padre, IdentityHashMap definisce i seguenti metodi:

Sr.No. Metodo e descrizione
1

void clear()

Rimuove tutte le mappature da questa mappa.

2

Object clone()

Restituisce una copia superficiale di questa mappa hash dell'identità: le chiavi e i valori stessi non vengono clonati.

3

boolean containsKey(Object key)

Verifica se il riferimento all'oggetto specificato è una chiave in questa mappa hash dell'identità.

4

boolean containsValue(Object value)

Verifica se il riferimento all'oggetto specificato è un valore in questa mappa hash dell'identità.

5

Set entrySet()

Restituisce una vista di insieme delle mappature contenute in questa mappa.

6

boolean equals(Object o)

Confronta l'oggetto specificato con questa mappa per l'uguaglianza.

7

Object get(Object key)

Restituisce il valore a cui è mappata la chiave specificata in questa mappa hash dell'identità o null se la mappa non contiene alcuna mappatura per questa chiave.

8

int hashCode()

Restituisce il valore del codice hash per questa mappa.

9

boolean isEmpty()

Restituisce true se questa mappa hash identità non contiene mappature valore-chiave.

10

Set keySet()

Restituisce una vista del set basata sull'identità delle chiavi contenute in questa mappa.

11

Object put(Object key, Object value)

Associa il valore specificato alla chiave specificata in questa mappa hash di identità.

12

void putAll(Map t)

Copia tutte le mappature dalla mappa specificata a questa mappa. Queste mappature sostituiranno tutte le mappature che questa mappa aveva per una qualsiasi delle chiavi attualmente nella mappa specificata.

13

Object remove(Object key)

Rimuove la mappatura per questa chiave da questa mappa, se presente.

14

int size()

Restituisce il numero di mappature valore-chiave in questa mappa hash di identità.

15

Collection values()

Restituisce una vista della raccolta dei valori contenuti in questa mappa.

Esempio

Il seguente programma illustra molti dei metodi supportati da questa raccolta:

import java.util.*;
public class IdentityHashMapDemo {

   public static void main(String args[]) {
      // Create a hash map
      IdentityHashMap ihm = new IdentityHashMap();
 
      // Put elements to the map
      ihm.put("Zara", new Double(3434.34));
      ihm.put("Mahnaz", new Double(123.22));
      ihm.put("Ayan", new Double(1378.00));
      ihm.put("Daisy", new Double(99.22));
      ihm.put("Qadir", new Double(-19.08));
      
      // Get a set of the entries
      Set set = ihm.entrySet();
      
      // Get an iterator
      Iterator i = set.iterator();
      
      // Display elements
      while(i.hasNext()) {
         Map.Entry me = (Map.Entry)i.next();
         System.out.print(me.getKey() + ": ");
         System.out.println(me.getValue());
      }
      System.out.println();
      
      // Deposit 1000 into Zara's account
      double balance = ((Double)ihm.get("Zara")).doubleValue();
      ihm.put("Zara", new Double(balance + 1000));
      System.out.println("Zara's new balance: " + ihm.get("Zara"));
   }
}

Questo produrrà il seguente risultato:

Produzione

Ayan: 1378.0
Qadir: -19.08
Mahnaz: 123.22
Daisy: 99.22
Zara: 3434.34

Zara's new balance: 4434.34