recorrer pairs entries ejemplo java iteration hashmap

pairs - java iterator map entries



Java: ¿obtiene el índice de clave en HashMap? (8)

En pocas palabras, las colecciones basadas en hash no están indexadas, por lo que debe hacerlo manualmente.

En Java, si estoy keySet() el keySet() de un HashMap , ¿cómo puedo (dentro del ciclo) obtener el índice numérico de esa clave?

Básicamente, mientras recorro el mapa, quiero obtener 0,1,2 ... Me imagino que esto sería más limpio que declarar un int e incrementar con cada iteración.

Gracias.


HashMap no tiene un orden definido de claves.


No estoy seguro si este es un "limpiador", pero:

List keys = new ArrayList(map.keySet()); for (int i = 0; i < keys.size(); i++) { Object obj = keys.get(i); // do stuff here }


No se puede: un conjunto no está ordenado, por lo que no se proporciona ningún índice. Tendrás que declarar un int, como dices. Recuerde que la próxima vez que llame a keySet () no necesariamente obtendrá los resultados en el mismo orden.


Si todo lo que intenta hacer es obtener el valor del hashmap mismo, puede hacer algo como lo siguiente:

for (Object key : map.keySet()) { Object value = map.get(key); //TODO: this }

O bien, puede iterar sobre las entradas de un mapa, si eso es lo que le interesa:

for (Map.Entry<Object, Object> entry : map.entrySet()) { Object key = entry.getKey(); Object value = entry.getValue(); //TODO: other cool stuff }

Como comunidad, podríamos brindarle respuestas mejores / más adecuadas si tuviéramos alguna idea de por qué necesitaba los índices o qué pensaba que los índices podrían hacer por usted.


Use LinkedHashMap en lugar de HashMap Siempre devolverá las claves en el mismo orden (como inserción) cuando se llama a keySet ()

Para más detalles, vea Clase LinkedHashMap


Al considerar esto como una alternativa igualmente viable a la respuesta de @Binil Thomas, intenté agregarlo como un comentario, pero no estaba convencido de la legibilidad de todo.

int index = 0; for (Object key : map.keySet()) { Object value = map.get(key); ++index; }

Probablemente no ayude al cartel de la pregunta original ya que esta es la situación literal que estaban tratando de evitar, pero puede ayudar a otros a buscar una respuesta fácil.


Hace poco aprendí los conceptos detrás de Hashmap y estaba claro que no había un orden definido de las claves. Para iterar puedes usar:

Hashmap<String,Integer> hs=new Hashmap(); for(Map.Entry<String, Integer> entry : hs.entrySet()){ String key=entry.getKey(); int val=entry.getValue(); //your code block }