获取TreeMap的键集的子集的简单方法(在Java中)

时间:2009-02-23 11:39:13

标签: java treemap

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

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

3 个答案:

答案 0 :(得分:4)

为什么要检查空值?

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

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

答案 1 :(得分: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
  }
}

答案 2 :(得分:1)

你可以使用:

[subMap method] [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)