String[] numbers = new String[] {"3", "4", "s", "a", "c", "h", "i", "n", "t", "e", "n", "d", "u", "l", "k"};
Map<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < numbers.length; i++) {
String key = numbers[i];
if (map.containsKey(key)) {
int occurrence = map.get(key);
occurrence++;
map.put(key, occurrence);
} else {
map.put(key, 1);
}// end of if else
}// end of for loop
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
int occurrence = map.get(key);
System.out.println(key + " occur " + occurrence + " time(s).");
}
此程序尝试计算字符串的出现次数。当我执行它时,我得到答案,但输出不是原始顺序,它是洗牌。如何按原始顺序输出字符串?
答案 0 :(得分:4)
HashMap不保证插入顺序。也许试试LinkedHashMap
答案 1 :(得分:0)
使用java.util.TreeMap,它实现了SortedMap接口,可以提供比较器。 使用firstKey()获取最小的密钥,将其用于getValue,即计算并从地图中删除它并从firstKey()重复调用
答案 2 :(得分:0)
像davin提到的那样使用LinkedHashMap。
您也可以在Java中使用“foreach”循环并替换:
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
int occurrence = map.get(key);
System.out.println(key + " occur " + occurrence + " time(s).");
}
使用
for(String key: map.keySet()) {
int occurrence = map.get(key);
System.out.println(key + " occur " + occurrence + " time(s).");
}
答案 3 :(得分:0)
您需要做的就是使用不同的Map实现(根据其他注释)。您可以更改一行以执行所需操作。
这
Map<String, Integer> map = new HashMap<String, Integer>();
到
Map<String, Integer> map = new LinkedHashMap<String, Integer>();