2

如果我有一个包含字符串和双精度的树形图。无论如何要从地图中检索前10个键?

4

5 回答 5

4

treeMap.entrySet().iterator()如果您想要键/值对或者treeMap.keySet().iterator()如果您只关心键,则通过获取迭代器,然后调用iterator.next()10 次或只要iterator.hasNext()返回true

List<Map.Entry<String, Double>> firstTen = new ArrayList<Map.Entry<String, Double>>(10);
Iterator<String, Double> iterator = treeMap.entrySet().iterator();
for (int i = 0; iterator.hasNext() && i < 10; i++) {
    firstTen.add(iterator.next());
}
于 2011-01-06T17:54:19.197 回答
1

不在 JDK 中,但在 3rd-party 库中有执行此操作的方法。

例如Iterables.limit来自番石榴

于 2011-01-06T17:53:14.673 回答
1

由于 aTreeMap是 a NavigableMap,因此您应该查看该接口中的方法。没有什么可以让您选择第一个n,但您可以选择所有键小于给定键的条目,等等。

否则,我只会使用 an并在迭代Iterator后停止。n

于 2011-01-06T17:54:41.890 回答
0

将其包装entrySet()在一个列表中并创建一个subList()

SortedMap<String,Double> treeMap = new TreeMap<String, Double>();
List<Entry<String, Double>> firstTen = 
    new ArrayList<Map.Entry<String,Double>>(treeMap.entrySet())
    .subList(0, 10);
for(Entry<String, Double> entry : firstTen){
    // do something with entries
}

缺点:整个地图会被复制到列表中。

于 2011-01-06T17:58:12.663 回答
0

它与 dkarp 和 sean 提供的代码片段一起工作。但是,它也适用于 DJClayworth 的建议。这是我解决它的方法:

    c=sorted_map.keySet();

    Iterator itr=c.iterator();
    String s="";
    while (i<iteratesize&&itr.hasNext()){
        s=(String) itr.next();
        System.out.println(s);
        s="";
        i++;
    }

非常感谢大家的帮助。对此,我真的非常感激。

于 2011-01-06T18:44:49.727 回答