获取哈希表前10个值(Get top 10 values in hash map)

2019-08-17 15:10发布

我试图找出我怎么可能从一开始的前10个值HashMap 。 我最初试图使用TreeMap和值有它的排序,然后但它似乎不是选项采取的第一个10个值,如TreeMap的键排序。

我想还是能够知道哪些键具有最高值,则K, V地图是String, Integer

Answer 1:

也许你应该实现Comparable接口存储在HashMap中的值对象。 然后你就可以创建所有值的数组列表:

List<YourValueType> l = new ArrayList<YourValueType>(hashmap.values());
Collection.sort(l);
l = l.subList(0,10);

问候



Answer 2:

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class Testing {

    public static void main(String[] args) {

        HashMap<String,Double> map = new HashMap<String,Double>();
        ValueComparator bvc =  new ValueComparator(map);
        TreeMap<String,Double> sorted_map = new TreeMap<String,Double>(bvc);

        map.put("A",99.5);
        map.put("B",67.4);
        map.put("C",67.4);
        map.put("D",67.3);

        System.out.println("unsorted map: "+map);

        sorted_map.putAll(map);

        System.out.println("results: "+sorted_map);
    }
}

class ValueComparator implements Comparator<String> {

    Map<String, Double> base;
    public ValueComparator(Map<String, Double> base) {
        this.base = base;
    }

    // Note: this comparator imposes orderings that are inconsistent with equals.    
    public int compare(String a, String b) {
        if (base.get(a) >= base.get(b)) {
            return -1;
        } else {
            return 1;
        } // returning 0 would merge keys
    }
}


Answer 3:

恐怕你必须遍历整个地图。 堆是用于查找顶部K中的元素,如在解释通常使用的数据结构这本书 。



Answer 4:

如果您想获得地图的10个最高值(假设值是数字或至少可比实现),那么试试这个:

List list = new ArrayList(hashMap.values());
Collections.sort(list);
for(int i=0; i<10; i++) {
   // Deal with your value
}


Answer 5:

让我们假设你有一个地图,但这个例子可以用于任何类型的工作

Map<String, String> m = yourMethodToGetYourMap();
List<String> c = new ArrayList<String>(m.values());
Collections.sort(c);
for(int i=0 ; i< 10; ++i) {
    System.out.println(i + " rank is " + c.get(i)); 
}


Answer 6:

我基地我的答案在这一个从sk2212

首先,你需要实现一个下降比较:

class EntryComparator implements Comparator<Entry<String,Integer>> {

    /**
     * Implements descending order.
     */
    @Override
    public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
        if (o1.getValue() < o2.getValue()) {
            return 1;
        } else if (o1.getValue() > o2.getValue()) {
            return -1;
        }
        return 0;
    }

}

然后,你可以在方法中使用它,如这一个属性“的HashMap”:

public List<Entry<String,Integer>> getTopKeysWithOccurences(int top) {
    List<Entry<String,Integer>> results = new ArrayList<>(hashmap.entrySet());
    Collections.sort(results, new EntryComparator());
    return results.subList(0, top);
}


文章来源: Get top 10 values in hash map