Siempre me pasa, que cuando paso mucho tiempo sin recorrer un HashMap , tengo que recurrir a Google para ver una manera más o menos eficiente de hacerlo. Esto es debido a que el foreach, no lo tengo muy instaurado en mi manera de programar, y mira que me gusta, pero no hay manera de que se me quede.
Así que os propongo una manera de recorrer un HashMap de la forma más eficiente que he encontrado, que es separando qué quieres obtener, sólo las claves, sólo los valores, o ambos.
package es.snippetea;
import java.util.HashMap;
import java.util.Map;
/**
*
* Clase que muestra como recorrer un HashMap en función de los valores que
* se quieran obtener, las claves sólo, los valores sólo o ambos valores.
*
* @author icendrero
*
*/
public class RecorrerHashMap {
/**
* Mapa que nos servirá de ejemplo. Recordar que esto es un HashMap, y puede
* contener tanto como clave como valor, un Object, por lo que en este caso,
* aunque he elegido String(me interesa más la manera de recorrer que lo que
* contiene) se puede meter cualquier objeto.
*/
private HashMap entradas;
/**
* Constructor de la clase
* @param numEntradas - Numero de entradas de ejemplo
*/
public RecorrerHashMap(int numEntradas){
//Inicializamos el HashMap y lo rellenamos para pruebas
entradas = new HashMap();
for (int i = 0; i < numEntradas; i++) {
entradas.put("Clave "+String.valueOf(i),
import java.util.HashMap;
import java.util.Map;
/**
*
* Clase que muestra como recorrer un HashMap en función de los valores que
* se quieran obtener, las claves sólo, los valores sólo o ambos valores.
*
* @author icendrero
*
*/
public class RecorrerHashMap {
/**
* Mapa que nos servirá de ejemplo. Recordar que esto es un HashMap, y puede
* contener tanto como clave como valor, un Object, por lo que en este caso,
* aunque he elegido String(me interesa más la manera de recorrer que lo que
* contiene) se puede meter cualquier objeto.
*/
private HashMap
/**
* Constructor de la clase
* @param numEntradas - Numero de entradas de ejemplo
*/
public RecorrerHashMap(int numEntradas){
//Inicializamos el HashMap y lo rellenamos para pruebas
entradas = new HashMap
for (int i = 0; i < numEntradas; i++) {
entradas.put("Clave "+String.valueOf(i),
"Valor de la clave "+String.valueOf(i));
}
}
/**
* Metodo para mostrar por pantalla todas las claves del mapa
*/
public void mostrarClaves() {
System.out.println("Mostrando las claves:");
for (String key : entradas.keySet()) {
System.out.println(key);
}
}
/**
* Metodo para mostrar por pantalla todos los valores del mapa
*/
public void mostrarValores() {
System.out.println("Mostrando los valores:");
for (String value : entradas.values()) {
System.out.println(value);
}
}
/**
* Metodo para mostrar por pantalla todos los pares Clave-Valor del mapa
*/
public void mostrarParesClaveValor() {
System.out.println("Mostrando los pares:");
for (Map.Entry entry : entradas.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
System.out.println(key + " - " + value);
}
}
/**
* Metodo main de pruebas.
*
* Resultado:
* -------------------------
* Mostrando las claves:
* Clave 0
* Clave 3
* Clave 1
* Clave 2
* Mostrando los valores:
* Valor de la clave 0
* Valor de la clave 3
* Valor de la clave 1
* Valor de la clave 2
* Mostrando los pares:
* Clave 0 - Valor de la clave 0
* Clave 3 - Valor de la clave 3
* Clave 1 - Valor de la clave 1
* Clave 2 - Valor de la clave 2
*
* @param args - no utiliza
*/
public static void main(String[] args) {
RecorrerHashMap mapa = new RecorrerHashMap(4);
mapa.mostrarClaves();
mapa.mostrarValores();
mapa.mostrarParesClaveValor();
}
}
}
}
/**
* Metodo para mostrar por pantalla todas las claves del mapa
*/
public void mostrarClaves() {
System.out.println("Mostrando las claves:");
for (String key : entradas.keySet()) {
System.out.println(key);
}
}
/**
* Metodo para mostrar por pantalla todos los valores del mapa
*/
public void mostrarValores() {
System.out.println("Mostrando los valores:");
for (String value : entradas.values()) {
System.out.println(value);
}
}
/**
* Metodo para mostrar por pantalla todos los pares Clave-Valor del mapa
*/
public void mostrarParesClaveValor() {
System.out.println("Mostrando los pares:");
for (Map.Entry
String key = entry.getKey();
Object value = entry.getValue();
System.out.println(key + " - " + value);
}
}
/**
* Metodo main de pruebas.
*
* Resultado:
* -------------------------
* Mostrando las claves:
* Clave 0
* Clave 3
* Clave 1
* Clave 2
* Mostrando los valores:
* Valor de la clave 0
* Valor de la clave 3
* Valor de la clave 1
* Valor de la clave 2
* Mostrando los pares:
* Clave 0 - Valor de la clave 0
* Clave 3 - Valor de la clave 3
* Clave 1 - Valor de la clave 1
* Clave 2 - Valor de la clave 2
*
* @param args - no utiliza
*/
public static void main(String[] args) {
RecorrerHashMap mapa = new RecorrerHashMap(4);
mapa.mostrarClaves();
mapa.mostrarValores();
mapa.mostrarParesClaveValor();
}
}
Hola ! Buenas noches... esta excelente estos metodos para recorrer los hashmap pero no habra una forma para que en vez de desplegarme los valores desordenados me los imprima en el orden que ingrese cada valor?
ResponderEliminarBuenas Diana! El Hashmap es un tipo de almacenamiento de datos que no guarda orden, por lo que siempre te devolverá un orden distinto (que no tiene porqué coincidir con el de adición)
ResponderEliminarTe recomiendo que utilices ArrayList para obtener en el mismo orden que se ingresaron. Una muestra de lo que te digo (y que puedes probar rápidamente es esto:
public static void main(String[] args) {
List myList = new ArrayList();
myList.add("one");
myList.add("two");
myList.add("three");
myList.add("four");
myList.add("five");
System.out.println("Inserted in 'order': ");
printList(myList);
System.out.println("\n");
System.out.println("Inserted out of 'order': ");
// Clear the list
myList.clear();
myList.add("four");
myList.add("five");
myList.add("one");
myList.add("two");
myList.add("three");
printList(myList);
}
private static void printList(List myList) {
for (String string : myList) {
System.out.println(string);
}
}
¡Muchas gracias por pasarte!
Isra.