HashMap es muy útil cuando se requiere un contador.
HashMap<String, Integer> countMap = new HashMap<String, Integer>(); //.... a lot of a's like the following if(countMap.keySet().contains(a)){ countMap.put(a, countMap.get(a)+1); }else{ countMap.put(a, 1); } |
1. Recorrer HashMap
Iterator it = mp.entrySet().iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry)it.next(); System.out.println(pairs.getKey() + " = " + pairs.getValue()); } |
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } |
2. Imprimir HashMap
public static void printMap(Map mp) { Iterator it = mp.entrySet().iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry)it.next(); System.out.println(pairs.getKey() + " = " + pairs.getValue()); it.remove(); // avoids a ConcurrentModificationException } } |
3. Ordenar HashMap por valor
El siguiente ejemplo de código aprovecha un constructor de TreeMap aquí.
class ValueComparator implements Comparator<String> { Map<String, Integer> base; public ValueComparator(Map<String, Integer> base) { this.base = base; } public int compare(String a, String b) { if (base.get(a) >= base.get(b)) { return -1; } else { return 1; } // returning 0 would merge keys } } |
HashMap<String, Integer> countMap = new HashMap<String, Integer>(); //add a lot of entries countMap.put("a", 10); countMap.put("b", 20); ValueComparator vc = new ValueComparator(countMap); TreeMap<String,Integer> sortedMap = new TreeMap<String,Integer>(vc); sortedMap.putAll(countMap); printMap(sortedMap); |
Hay diferentes formas de ordenar HashMap, esta forma ha sido la más votada en stackoverflow.