根据值排序HashMap

时间:2018-01-21 21:33:42

标签: java sorting data-structures

所以我正在读取一个文件,需要计算该文件中的重复数量。我不能存储重复。然后我需要根据发生的顺序显示文件的内容

到目前为止我的代码:

    // use hashmap to store the values
    Map<String, Integer> myMap = new HashMap<>();

    // loop through
    for (String line = r.readLine(); line!=null; line = r.readLine()) {
        if (myMap.containsKey(line)) {
            myMap.put(line, myMap.get(line)+1);
        } else {
            myMap.put(line, 1);
        }
    }   

我将它们存储在地图中,因为它们具有唯一的键;我面临的问题是我需要按从最大到最小的整数值对它们进行排序。

示例输入:

World
World
World
Hello
Hello
Hello
Hello

预期产出:

Hello
World

2 个答案:

答案 0 :(得分:1)

你绝对可以使用TreeMap,但是一个更简单的方法就是导出到ArrayList并通过比较器进行排序,如果你已经在HashMap中使用了所有东西。以下是您将如何实现这一目标:

//This comparator sorts by HashMap values.
Comparator <Map.Entry<String, Integer>> sortCompare = 
(Map.Entry<String, Integer> firstValue, Map.Entry<String, Integer> secondValue)
   -> secondValue.getValue().compareTo(firstValue.getValue());

//This is the list that will hold each entry from the map.
List<Map.Entry<String, Integer>> orderedList = new ArrayList<>();

//Pulls the data from the existing map.
orderedList.addAll(myMap.entrySet());

//Now all that is left to do is sort with the comparator we made.
Collections.sort(orderedList, sortCompare);

//Now the array list is ordered largest to smallest and you can do whatever with it.

这是我处理排序的方式,因为我不太喜欢TreeMaps,但是如果你想要消除HashMap,你可以做一些研究并使用它们。

答案 1 :(得分:0)

您可以使用TreeMap将唯一字符串作为键和出现次数存储为值。 TreeMap支持自定义比较器,因此您可以编写逻辑来对地图中的每个条目进行排序。