按原始顺序打印结果

时间:2011-01-14 23:36:29

标签: java map

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).");
}

此程序尝试计算字符串的出现次数。当我执行它时,我得到答案,但输出不是原始顺序,它是洗牌。如何按原始顺序输出字符串?

4 个答案:

答案 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>();