使用HashMap基于值的逆序?

时间:2015-02-01 23:28:44

标签: java

使用的HashMap是:

public static HashMap<User,Integer> onlineUsers = new HashMap<User,Integer>();

假设我添加了这样的值:

onlineUsers.put(myUserObj,1);
onlineUsers.put(myUserObj,5);
onlineUsers.put(myUserObj,2);

如何按降序打印出值?

5
2
1

我已经看过如何使用TreeMap,但在这种情况下Key不能是整数。

5 个答案:

答案 0 :(得分:1)

HashMap只是key/value对,并且没有排序。

但是,可以使用Map的SortedSet按值对Map.entry进行排序。请参阅此帖子了解如何执行此操作TreeMap sort by value

答案 1 :(得分:0)

地图不按值排序。其中一些(如TreeMap)按键排序,其中一些(如HashMap)根本不排序。

所以你需要做的是获取值集合并对它们进行排序。

List<Integer> values = new ArrayList<>(map.values());
Collections.sort(values, Collections.reverseOrder())

答案 2 :(得分:0)

你可以这样做

// for each value
map.values()
   // sort them in reverse order
   .sort(Collections.reverseOrder())
   // and print each one
   .forEach(System.out::println);

假设您想通过降低值来对键进行排序。你可以这样做。

map.entrySet()
   .sort(Comparator.comparing(Map.Entry::getValue()).reversed())
   .map(Map.Entry::getKey())
   .forEach(System.out::println);

答案 3 :(得分:-1)

因为根据你的说法,treeMap不是一个选项,你可以通过你的hashmap迭代并将值保存在临时的arrayList中。现在对其使用排序操作,然后输出结果。

答案 4 :(得分:-1)

如果您想按添加元素的顺序进行迭代,则应使用 LinkedHashMap

TreeMap是一个有序的地图。这意味着它使用ComparableComparator接口对元素进行排序。它根据与其他元素的比较进行排序(并迭代)。 LinkedHashMap将根据您插入元素的顺序进行排序。