如果我有一个包含字符串和双精度的树形图。无论如何要从地图中检索前10个键?
问问题
1589 次
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 库中有执行此操作的方法。
于 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 回答