Java - a classe IdentityHashMap

Esta classe implementa AbstractMap. É semelhante ao HashMap, exceto que usa igualdade de referência ao comparar os elementos.

Esta classe não é uma implementação de mapa de uso geral. Embora essa classe implemente a interface Map, ela viola intencionalmente o contrato geral do Map, que exige o uso do método equals ao comparar objetos.

Esta classe é projetada para uso apenas em casos raros em que a semântica de igualdade de referência é necessária. Essa classe fornece desempenho em tempo constante para as operações básicas (obter e colocar), assumindo que a função hash de identidade do sistema (System.identityHashCode (Object)) dispersa os elementos adequadamente entre os depósitos.

Essa classe tem um parâmetro de ajuste (que afeta o desempenho, mas não a semântica): tamanho máximo esperado. Este parâmetro é o número máximo de mapeamentos de valores-chave que o mapa deve conter.

A seguir está a lista dos construtores suportados pelo IdentityHashMap.

Sr. Não. Construtor e descrição
1

IdentityHashMap()

Este construtor constrói um novo mapa de hash de identidade vazio com um tamanho máximo esperado padrão (21).

2

IdentityHashMap(int expectedMaxSize)

Este construtor constrói um novo IdentityHashMap vazio com o tamanho máximo esperado especificado.

3

IdentityHashMap(Map m)

Este construtor constrói um novo mapa de hash de identidade contendo os mapeamentos de chaves-valor no mapa especificado.

Além dos métodos herdados de suas classes pai, IdentityHashMap define os seguintes métodos -

Sr. Não. Método e Descrição
1

void clear()

Remove todos os mapeamentos deste mapa.

2

Object clone()

Retorna uma cópia superficial deste mapa hash de identidade: as chaves e os valores em si não são clonados.

3

boolean containsKey(Object key)

Testa se a referência do objeto especificado é uma chave neste mapa hash de identidade.

4

boolean containsValue(Object value)

Testa se a referência de objeto especificada é um valor neste mapa de hash de identidade.

5

Set entrySet()

Retorna uma visualização definida dos mapeamentos contidos neste mapa.

6

boolean equals(Object o)

Compara o objeto especificado com este mapa para igualdade.

7

Object get(Object key)

Retorna o valor para o qual a chave especificada é mapeada neste mapa hash de identidade ou nulo se o mapa não contém mapeamento para esta chave.

8

int hashCode()

Retorna o valor do código hash para este mapa.

9

boolean isEmpty()

Retorna verdadeiro se este mapa hash de identidade não contiver mapeamentos de valores-chave.

10

Set keySet()

Retorna uma visualização de conjunto baseada em identidade das chaves contidas neste mapa.

11

Object put(Object key, Object value)

Associa o valor especificado à chave especificada neste mapa de hash de identidade.

12

void putAll(Map t)

Copia todos os mapeamentos do mapa especificado para este mapa. Esses mapeamentos substituirão todos os mapeamentos que este mapa tinha para qualquer uma das chaves atualmente no mapa especificado.

13

Object remove(Object key)

Remove o mapeamento para esta chave deste mapa, se presente.

14

int size()

Retorna o número de mapeamentos de valor-chave neste mapa hash de identidade.

15

Collection values()

Retorna uma visualização de coleção dos valores contidos neste mapa.

Exemplo

O programa a seguir ilustra vários dos métodos suportados por esta coleção -

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"));
   }
}

Isso produzirá o seguinte resultado -

Resultado

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

Zara's new balance: 4434.34