-1

是否可以从 TreeMap 中提取前 n 个(我使用 top 因为我相信 TreeMap 已排序)关键元素,而无需使用 Iterator 对象进行迭代。

我可以进行迭代,但必须检查空值等很乏味。

4

3 回答 3

4

为什么要检查空值?

如果您使用Google Collections Library,您可以使用Iterables.limit

编辑:出于某种原因,GCL 页面不包含limit,但它在Guava中(它已经有效地取代了 GCL) - 它仍然是Iterables.limit.

于 2009-02-23T11:42:29.983 回答
2

.subMap(low,high).keySet()您可以使用或轻松获取从一个键到另一个键的键子集.headMap(high).keySet()

找出第n个正确的高键更难,因为没有直接的方法,迭代是唯一可靠的方法。

(此代码未经测试

public <K,V> SortedMap<K,V> subMap(SortedMap<K,V> map, int n) {
  Iterator<K> it = map.keySet().iterator();
  for (int i = 0; i<n && it.hasNext(); i++) {
    it.next();
  }
  if (it.hasNext()) {
    return map.headMap(it.next());
  } else {
    return map
  }
}
于 2009-02-23T12:49:06.313 回答
1

您可以使用:

[子图方法][1]

public NavigableMap<K,V> subMap(K fromKey,boolean fromInclusive,K toKey,boolean toInclusive)

[1]: http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html#subMap(K , boolean, K, boolean)

于 2009-02-23T11:53:59.627 回答