我正在研究需要从HashMap中查找至少3个三个值的项目。我找到了找到最高价值的代码。这里是。

public static <K, V extends Comparable<? super V>> List<Entry<K, V>>

    findGreatest(Map<K, V> map, int n)
    {
    Comparator<? super Entry<K, V>> comparator =
        new Comparator<Entry<K, V>>()
    {
        public int compare(Entry<K, V> e0, Entry<K, V> e1)
        {
            V v0 = e0.getValue();
            V v1 = e1.getValue();
            return v0.compareTo(v1);
        }
    };
    PriorityQueue<Entry<K, V>> highest =
        new PriorityQueue<Entry<K,V>>(n, comparator);
    for (java.util.Map.Entry<K, V> entry : map.entrySet())
    {
        highest.offer(entry);
        while (highest.size() > n)
        {
            highest.poll();
        }
    }

    List<Entry<K, V>> result = new ArrayList<Map.Entry<K,V>>();
    while (highest.size() > 0)
    {
        result.add(highest.poll());
    }
    return result;
    }


我如何修改凸轮以找到最小值?
请在这里帮助我。
更新:对不起,我的错误是我想从HashMap中查找最小值

最佳答案

您可以使用完全相同的代码,只是使用Collections.reverseOrder(Comparator c)反转Comparator的顺序。

PriorityQueue<Entry<K, V>> highest =
    new PriorityQueue<Entry<K,V>>(n, Collections.reverseOrder(comparator));


但是,那不是最有效的方法。可以一次完成此操作。

09-25 22:05