首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取哈希表中的前10个值

获取哈希表中的前10个值
EN

Stack Overflow用户
提问于 2013-03-15 23:43:05
回答 6查看 23.4K关注 0票数 8

我正在尝试弄清楚如何从HashMap中获得前10个值。我最初尝试使用TreeMap并让它按值排序,然后取前10个值,但这似乎不是一个选择,因为TreeMap是按键排序的。

我希望仍然能够知道哪些键具有最高的值,映射的K, VString, Integer

EN

回答 6

Stack Overflow用户

发布于 2013-03-15 23:52:55

也许您应该为存储在哈希图中的值对象实现Comparable接口。然后,您可以创建包含所有值的数组列表:

代码语言:javascript
复制
List<YourValueType> l = new ArrayList<YourValueType>(hashmap.values());
Collection.sort(l);
l = l.subList(0,10);

问候

票数 4
EN

Stack Overflow用户

发布于 2013-03-15 23:57:40

代码语言:javascript
复制
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
    }
}
票数 3
EN

Stack Overflow用户

发布于 2013-03-15 23:48:28

我担心你必须遍历整个地图。正如this book中所述,Heap是用于查找前K个元素的常用数据结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15436516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档