-1

Iteratorオブジェクトを使用して反復することなく、TreeMapから上位n個のキー要素(TreeMapがソートされていると思うのでtopを使用)を抽出することは可能ですか?

反復を行うことはできますが、nullなどをチェックするのは面倒です。

4

3 に答える 3

4

なぜnullをチェックするのですか?

Googleコレクションライブラリを使用する場合は、Iterables.limitを使用できます。

編集:何らかの理由でGCLページにはが含まれていませんがlimitGuavaにあります(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

あなたが使用することができます:

[subMap メソッド][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 に答える