使用的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不能是整数。
答案 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是一个有序的地图。这意味着它使用Comparable或Comparator接口对元素进行排序。它根据与其他元素的比较进行排序(并迭代)。 LinkedHashMap将根据您插入元素的顺序进行排序。