Java: la clase IdentityHashMap
Esta clase implementa AbstractMap. Es similar a HashMap, excepto que usa igualdad de referencia al comparar los elementos.
Esta clase no es una implementación de Map de propósito general. Si bien esta clase implementa la interfaz de Map, viola intencionalmente el contrato general de Map, que exige el uso del método equals al comparar objetos.
Esta clase está diseñada para usarse solo en casos excepcionales en los que se requiere una semántica de igualdad de referencia. Esta clase proporciona un rendimiento en tiempo constante para las operaciones básicas (obtener y poner), asumiendo que la función hash de identidad del sistema (System.identityHashCode (Object)) dispersa los elementos correctamente entre los depósitos.
Esta clase tiene un parámetro de ajuste (que afecta al rendimiento pero no a la semántica): tamaño máximo esperado. Este parámetro es el número máximo de asignaciones clave-valor que se espera que contenga el mapa.
A continuación se muestra la lista de los constructores compatibles con IdentityHashMap.
No Señor. | Constructor y descripción |
---|---|
1 | IdentityHashMap() Este constructor construye un nuevo mapa hash de identidad vacío con un tamaño máximo esperado predeterminado (21). |
2 | IdentityHashMap(int expectedMaxSize) Este constructor construye un IdentityHashMap nuevo y vacío con el tamaño máximo esperado especificado. |
3 | IdentityHashMap(Map m) Este constructor construye un nuevo mapa hash de identidad que contiene las asignaciones de clave-valor en el mapa especificado. |
Además de los métodos heredados de sus clases principales, IdentityHashMap define los siguientes métodos:
No Señor. | Método y descripción |
---|---|
1 | void clear() Elimina todas las asignaciones de este mapa. |
2 | Object clone() Devuelve una copia superficial de este mapa hash de identidad: las claves y los valores en sí mismos no se clonan. |
3 | boolean containsKey(Object key) Comprueba si la referencia del objeto especificado es una clave en este mapa hash de identidad. |
4 | boolean containsValue(Object value) Comprueba si la referencia de objeto especificada es un valor en este mapa hash de identidad. |
5 | Set entrySet() Devuelve una vista de conjunto de las asignaciones contenidas en este mapa. |
6 | boolean equals(Object o) Compara el objeto especificado con este mapa para determinar la igualdad. |
7 | Object get(Object key) Devuelve el valor al que se asigna la clave especificada en este mapa hash de identidad, o nulo si el mapa no contiene ninguna asignación para esta clave. |
8 | int hashCode() Devuelve el valor del código hash para este mapa. |
9 | boolean isEmpty() Devuelve verdadero si este mapa hash de identidad no contiene asignaciones clave-valor. |
10 | Set keySet() Devuelve una vista de conjunto basada en la identidad de las claves contenidas en este mapa. |
11 | Object put(Object key, Object value) Asocia el valor especificado con la clave especificada en este mapa hash de identidad. |
12 | void putAll(Map t) Copia todas las asignaciones del mapa especificado a este mapa. Estas asignaciones reemplazarán las asignaciones que este mapa tenía para cualquiera de las claves que se encuentran actualmente en el mapa especificado. |
13 | Object remove(Object key) Elimina la asignación de esta clave de este mapa si está presente. |
14 | int size() Devuelve el número de asignaciones clave-valor en este mapa hash de identidad. |
15 | Collection values() Devuelve una vista de colección de los valores contenidos en este mapa. |
Ejemplo
El siguiente programa ilustra varios de los métodos admitidos por esta colección:
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"));
}
}
Esto producirá el siguiente resultado:
Salida
Ayan: 1378.0
Qadir: -19.08
Mahnaz: 123.22
Daisy: 99.22
Zara: 3434.34
Zara's new balance: 4434.34