Em relação às quatro maneiras específicas de percorrer um mapa em Java, consulte a explicação detalhada abaixo.
Método 1 Esta é a maneira mais comum e, na maioria dos casos, a mais desejável de percorrer. Usado quando a chave e o valor são necessários.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> input : map.entrySet()) { System.out.println("Key = " + input. getKey() + ", Valor = " + entrada.getValue() }
O método 2 percorre chaves ou valores em um loop for-each.
Se você precisar apenas das chaves ou valores no mapa, poderá percorrer keySet ou valores em vez de usar entrySet.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); //Percorre as chaves no mapa for (Integer key : map.keySet()) { System.out.println("Key = " + key ) ; } //Percorre os valores no mapa for (Valor inteiro: map.values()) { System.out.println("Value = " + value });
Este método tem desempenho um pouco melhor do que a travessia de entrySet (10% mais rápido) e o código é mais limpo.
O método três usa Iterator para percorrer
Utilize genéricos :
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Iterator<Map.Entry<Integer, Integer>> entradas = map.entrySet().iterator(); Map.Entry<Integer, Integer> entrada = entradas.next(); System.out.println("Chave = " + entrada.getKey() + ", Valor = " + entrada.getValue() }
Sem usar genéricos:
Mapa mapa = new HashMap(); entradas do Iterador = map.entrySet().iterator(); Inteiro)entry.getKey(); Valor inteiro = (Integer)entry.getValue(); " + valor); }
Você também pode aplicar a mesma abordagem a keySets e valores.
Esta abordagem parece redundante, mas tem suas vantagens. Em primeiro lugar, esta é a única maneira de percorrer um mapa em versões mais antigas do Java. Outro benefício é que você pode chamar iterator.remove() para excluir entradas durante a travessia, o que os outros dois métodos não podem. De acordo com o javadoc, se você tentar usar esse método em uma travessia for-each, os resultados serão imprevisíveis.
Do ponto de vista do desempenho, este método é semelhante ao desempenho da travessia for-each (ou seja, método 2).
Método 4: percorrer encontrando valores por chave (baixa eficiência)
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (chave inteira: map.keySet()) { Valor inteiro = map.get(key); + chave + ", Valor = " + valor);
Como alternativa ao método um, esse código parece mais limpo, mas na verdade é bastante lento e ineficiente. Porque obter o valor da chave é uma operação demorada (em comparação com o método 1, este método é 20% a 200% mais lento em diferentes implementações de Mapa). Se você tiver FindBugs instalado, ele irá verificar e avisar sobre travessias ineficientes. Portanto, tente evitar usá-lo.
Resumir
Se você precisar apenas de chaves ou valores, use o método dois. Se a versão da linguagem que você está usando for inferior a Java 5 ou se você planeja excluir entradas durante a passagem, deverá usar o método três. Caso contrário, use o método um (chave e valor).