按降序排列地图

时间:2014-11-17 21:02:58

标签: java hashmap

我实际上从这个例子中得到了这个:

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;
}

我发现它on this site; here.

现在,我已经实现了这个代码,它确实有效。在大多数情况下,我了解发生了什么。我不完全理解的代码的唯一部分是在方法标题内,具体来说:

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

如果有人能向我解释这部分代码,我将非常感激。特别是为什么我应该在这种背景下使用super。

我对Java相当陌生,所以试图很好地理解使用不同的技术,而不是仅仅将它们放入我的代码中,而不是真正了解它的发生情况。

注意:我会对原始答案发表评论,但如果我的声誉超过50,我只能发表评论。我希望我不会通过这样的发布来破坏任何规则!

2 个答案:

答案 0 :(得分:1)

这个想法是V与至少其他V相当,但也可以与其他类型相比 - 也就是说,与{{1}的超类型相比}。

答案 1 :(得分:1)

这一行使该方法具有通用性。您可以在类标头或方法声明中使用泛型类型。在这种情况下,方法声明。

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

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

额外阅读