Un par de nuestros usuarios nos preguntaban sobre cómo calcular las ocurrencias que aparecen en un array de números. Es decir, cuántas veces aparece un número en u n array. Así, que vamos a ver cómo hacerlo…
La idea será recorrer el array (no nos queda otro remedio) y mientras recorremos el array guardar los números en un HashMap. Dónde la clave es el número a contabilidad y el valor asociado a esa clave la cantidad de veces que aparece dicho número.
Lo primero, el array y el HashMap:
int[] listaNumeros = {1,4,7,8,9,2,7,15,4,6,9,9,8};
HashMap hm = new HashMap();
Ahora empezamos a recorrer el array. Si el número del array ya está en el HashMap, esto nos lo dice el método .containsKey(), incrementamos su valor en uno. Si elemento no está en el array lo inicializamos con 1.
for (int x=0;x < listaNumeros.length;x++) {
clave = listaNumeros[x];
if (hm.containsKey(clave))
hm.put(clave, hm.get(clave)+1);
else
hm.put(clave,1);
}
Para acceder a los elementos de HashMap utilizamos los método .put() y .get()
Una vez cargado el HashMap solo nos quedará listarlo para ver los valores de los números y las ocurrencias que había en el array.
Para listar los elementos del HashMap vamos a utilizar un Iterator, el cual se apoyará en un conjunto o Set devuelto por el HashMap mediante el metodo .entrySet()
Hay que tener cuidado al manipular el conjunto devuelto por el HashMap ya que realmente es una vista del HashMap. Así que cualquier operación de borrado que hagamos sobre la vista se reflejará directamente en el HashMap.
Iterator < Entry < Integer,Integer > > it = hm.entrySet().iterator();
String vez;
while (it.hasNext()) {
Entry e = it.next();
vez = (e.getValue()>1)?" veces":" vez";
System.out.println("El número " + e.getKey() + " aparece " + e.getValue() + vez);
}
Si nos fijamos en el código, cada entrada está representada por un par clave/valor, que en Java se representa con un Map.Entry y que tienen sus métodos .getKey() y .getValue()