Простой способ получить подмножество набора ключей TreeMap (в Java) - PullRequest
0 голосов
/ 23 февраля 2009

Можно ли извлечь верхние n (я использую top, потому что я считаю, что TreeMap отсортирован) ключевые элементы из TreeMap, без итерации с использованием объекта Iterator.

Я могу выполнить итерацию, но скучно проверять наличие нулей и т. Д.

Ответы [ 3 ]

4 голосов
/ 23 февраля 2009

Зачем вам проверять наличие нулей?

Если вы используете Библиотеку коллекций Google , вы можете использовать Iterables.limit .

РЕДАКТИРОВАТЬ: По какой-то причине страница GCL не включает limit, но она находится в Guava (которая фактически заменила GCL) - она ​​все еще Iterables.limit.

2 голосов
/ 23 февраля 2009

Вы можете легко получить подмножество клавиш от одной клавиши до другой, используя .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
  }
}
1 голос
/ 23 февраля 2009

вы можете использовать:

[метод 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, логический, K, логический)

...