java - 按降序对 map 进行排序

标签 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 时我才能发表评论。我希望我这样发帖不会违反任何规则!

最佳答案

这一行使该方法变得通用。您可以在类 header 或方法声明中使用泛型类型。在本例中,为方法声明。

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

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

额外阅读

关于java - 按降序对 map 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26981916/

相关文章:

java - 如果订单有多个,则将数据添加到 hashmap (Java)

Javascript 将数组转换为以数组属性为键的映射,并将相应的重复键值存储为数组

java - 如何按其值类的字段对 LinkedHashMap 进行排序?

java - hashmap 如何识别何时需要重新哈希

java - 使用 HashMap 的 hashCode() 方法

java - 使用 iText 在 PDF 中禁用 PushbuttonField

java - List<Object> 到 Map<String, Map<String,List<Object>>>

java - 如何使用 ctrl + space 在 Eclipse 中插入 System.out.println()

java - jfreechart自定义滚动产生索引越界异常

Java仅解析雅虎温度XML