我做了这样的地图:

Map <Integer, Integer> hm = new HashMap<Integer, Integer>();
for(int i = 0; i<courses.size(); i++){
   int occurrences = Collections.frequency(subs, courses.get(i).getCourseId());
   hm.put(i+1, occurrences);
}
System.out.println("map:");
System.out.println(hm);


该映射包含整数,一个是课程ID,一个是该课程在我数组中出现的次数。但是现在的输出是:

map:
{1=3, 2=2, 3=4}


我需要获取最高值(因此我需要第二个整数值)。我试图对有效的地图进行排序,然后输出如下:

{3=4, 1=3, 2=2}


但是,我需要获取最高值并将它们返回其他值。
我想要的输出是:

3, 1, 2


当然。
感谢您的提前帮助!

编辑:我将代码更改为此:

Map <Integer, Integer> hm = new TreeMap<Integer, Integer>();
for(int i = 0; i<courses.size(); i++){
    int occurrences = Collections.frequency(subs, courses.get(i).getCourseId());
    hm.put(occurrences, i+1);
}


并使用以下命令打印值:

hm.values();


然后我的输出是:
[2,1,3]
我需要我的输出是[3,1,2]。

最佳答案

LinkedHashMap保留插入顺序。

输出:

Key : 3 Value : 4
Key : 1 Value : 3
Key : 2 Value : 2


码:

import java.util.*;

class SortMapValues {
    public static boolean ASC = true;
    public static boolean DESC = false;

    public static void main(String[] args) {
        // Creating dummy unsorted map
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        map.put(1, 3);
        map.put(2, 2);
        map.put(3, 4);

        Map<Integer, Integer> sortedMapDesc = sortByComparator(map, DESC);
        printMap(sortedMapDesc);

    }

    private static Map<Integer, Integer> sortByComparator(Map<Integer, Integer> map, final boolean order) {
        List<Entry<Integer, Integer>> list = new LinkedList<Entry<Integer, Integer>>(map.entrySet());

        // Sorting the list based on values
        Collections.sort(list, new Comparator<Entry<Integer, Integer>>() {
            public int compare(Entry<Integer, Integer> o1,
                    Entry<Integer, Integer> o2) {
                if (order) {
                    return o1.getValue().compareTo(o2.getValue());
                }
                else {
                    return o2.getValue().compareTo(o1.getValue());
                }
            }
        });

        // Maintaining insertion order with the help of LinkedList
        Map<Integer, Integer> sortedMap = new LinkedHashMap<Integer, Integer>();
        for (Entry<Integer, Integer> entry : list) {
            sortedMap.put(entry.getKey(), entry.getValue());
        }

        return sortedMap;
    }

    public static void printMap(Map<Integer, Integer> map) {
        for (Entry<Integer, Integer> entry : map.entrySet()) {
            System.out.println("Key : " + entry.getKey() + " Value : "+ entry.getValue());
        }
    }
}

09-05 03:48