metodos - recorrer hashmap java foreach
Al usar un HashMap, ¿se garantiza que los valores y las claves estarán en el mismo orden al iterar? (9)
Cuando repito los valores o las claves, ¿correlacionarán? ¿La segunda clave se correlacionará con el segundo valor?
Ambos valores () y keySet () delegan en el iterador entrySet () para que se devuelvan en el mismo orden. Pero, como dice Alex, es mucho mejor usar el iterador entrySet () directamente.
Desea utilizar esto, LinkedHashMap , para orden de iteración predecible
El método keySet de HashMap devuelve un conjunto, que no garantiza el orden.
El método HashMap values () devuelve una colección, lo que no garantiza el orden.
Dicho esto, la pregunta era "¿van a correlacionarse?" Por lo que técnicamente la respuesta es tal vez, pero no confíe en ello.
Estoy de acuerdo con pmac72. No suponga que obtendrá valores ordenados o claves de una colección no ordenada. Si funciona de vez en cuando, es solo un peligro. Si desea que se guarde la orden, utilice un mapa de búsqueda de LinkedHashMap o un mapa de colecciones común de OrderedMap.
La pregunta me confundió al principio, pero @Matt me lo aclaró.
Considere usar el método entrySet () que devuelve un conjunto con los pares clave-valor en el Mapa.
Map<Integer, Integer> a = new HashMap<Integer, Integer>(2);
a.put(1, 2);
a.put(2, 3);
for (Map.Entry<Integer, Integer> entry : a.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
Esto produce:
1 => 2
2 => 3
3 => 3
No, no necesariamente Realmente debería usar el entrySet (). Iterator () para este propósito. Con este iterador, recorrerá todos los objetos Map.Entry en el Mapa y podrá acceder a cada clave y valor asociado.
Yo segundo @basszero. Mientras
for (Map.Entry<Integer, Integer> entry : a.entrySet())
funcionará, encuentro que usar una estructura de datos que hace esto automáticamente es más agradable. Ahora, puedes iterar "normalmente"
para usar el conjunto de entrada que @Cuchullain mencionó:
Map<String, String> map = new HashMap<String, String>();
// populate hashmap
for (Map.Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// your code here
}
public class Test {
public static void main(String[] args) {
HashMap <String,String> hashmap = new HashMap<String,String>();
hashmap.put("one", "1");
hashmap.put("two", "2");
hashmap.put("three", "3");
hashmap.put("four", "4");
hashmap.put("five", "5");
hashmap.put("six", "6");
Iterator <String> keyIterator = hashmap.keySet().iterator();
Iterator <String> valueIterator = hashmap.values().iterator();
while(keyIterator.hasNext()) {
System.out.println("key: "+keyIterator.next());
}
while(valueIterator.hasNext()) {
System.out.println("value: "+valueIterator.next());
}
}
}
key: two
key: five
key: one
key: three
key: four
key: six
value: 2
value: 5
value: 1
value: 3
value: 4
value: 6