How do I get the list of possible values in a HashMap<String, Integer>?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How do I iterate over each Entry in a Map?
我正在编写一个程序,它将接受一个输入(数据),这是一个字符串数组,并按出现频率的顺序返回它们,然后按字母顺序返回,如果它们在输入中出现的次数相同。我使用了一个hashmap将每个字符串映射到它在数组中出现的次数,然后我的想法是使用for循环迭代每个出现次数,但是我找不到一个命令来返回hashmap中唯一值的数量。有人知道如何得到这个值吗?
此外,如果您有一个更简单的方法来执行我描述的任务,任何建议都是受欢迎的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | HashMap<String, Integer> sortmap = new HashMap<String, Integer>(); ArrayList<String> stringlist = new ArrayList<String>(); ArrayList<String> stringlist2 = new ArrayList<String>(); for(String x : data) { if(sortmap.containsKey(x)){ sortmap.put(x, sortmap.get(x)+1); } else{ sortmap.put(x, 1); } } for (String s : sortmap.keySet()){ for (int i : sortmap.values()){ if (sortmap.get(s) == i){ stringlist2.add(s); } } } |
最后的双循环是非常不幸的。
获取sortmap.entryset()并将其存储在数组中。然后用数组对数组进行排序。使用自己的比较器进行排序,比较器首先考虑计数器,如果计数器相等,则按字母顺序比较字符串。
我明白了-这是所有想知道的人的逻辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public String[] sort(String[] data) { TreeMap<String, Integer> sortmap = new TreeMap<String, Integer>(); ArrayList<String> stringlist = new ArrayList<String>(); for(String x : data){ if(sortmap.containsKey(x)) sortmap.put(x, sortmap.get(x)+1); else sortmap.put(x, 1); } Arrays.sort(sortmap.values().toArray(), 0, sortmap.size()); for (int i = data.length; i > 0; i--){ for (Entry<String, Integer> k : sortmap.entrySet()){ if (k.getValue() == i) stringlist.add(k.getKey()); } } String[] output = stringlist.toArray(new String[stringlist.size()]); return output; } |