关于java:按降序排列地图

Sorting Map in descending order

我从这个例子中得到了实际的结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static <K,V extends Comparable<? super V>>
        List<Entry<K, V>> entriesSortedByValues(Map<K,V> map) {

List<Entry<K,V>> sortedEntries = new ArrayList<Entry<K,V>>(map.entrySet());

Collections.sort(sortedEntries,
        new Comparator<Entry<K,V>>() {
            @Override
            public int compare(Entry<K,V> e1, Entry<K,V> e2) {
                return e2.getValue().compareTo(e1.getValue());
            }
        }
);

return sortedEntries;
}

我在这个网站上找到的;在这里。

现在,我已经实现了这段代码,它确实有效。我知道发生了什么,在很大程度上。我不完全理解的代码的唯一部分在方法头中,特别是:

1
static <K,V extends Comparable<? super V>>

如果有人能向我解释这部分代码,我将非常感激。特别是我为什么要在这个上下文中使用super。

我对Java相当陌生,所以尝试了解使用不同的技术,而不是仅仅把它们扔进我的代码,而不真正了解正在发生的事情。

注意:我会对原始答案发表评论,但只有当我的声誉超过50时,我才能发表评论。我希望这样的帖子不会违反任何规则!


此行将使方法成为泛型。您可以在类头或方法声明中使用泛型类型。在这种情况下,方法声明。

1
static <K,V extends Comparable<? super V>>

声明一个未绑定的泛型类型K。这意味着它可以是Object类型的任何子类。然后声明第二个类型,V,它必须实现Comparable接口。Comparable实现也是类型化的,并且该方法增加了一个绑定,说明可比较类应该能够与泛型类型V的任何父类型进行比较。

额外阅读

  • 查看Java泛型


这种观点认为,V至少可以与其他V相比较,但也可以与其他类型相比较,也就是说,可以与V的任何超类型相比较。