Извлечение диапазона значений из Map в Java - PullRequest
3 голосов
/ 17 февраля 2012

Возможно ли получить значения, которые соответствуют диапазону ключей в Java Map.Предположим, у меня есть

Map<Key,Value> //size 10,000
Key   - 9.0, 9.1, 9.5, 4.2, 4.3, 6.1, 6.6
Value - 10 , 20 , 30 , 40 , 20 , 60 , 10  

ArrayList alMatch = {1.0,4.0,6.0}

. В этом случае для значения 4.0 я хочу получить 40 (ключ 4.2) и 20 (ключ 4.3).Поэтому я хочу получить все значения, сопоставленные с ключом 5.0 >= key>=4.0 на карте.Можно ли сделать это через карту или аналогичную структуру данных.

Размер карты огромен.Или есть другой лучший способ добиться того же с минимальной сложностью.

1 Ответ

7 голосов
/ 17 февраля 2012

Вы можете использовать реализацию NavigableMap (пример TreeMap).В частности, этот метод может вас заинтересовать:

/**
 * Returns a view of the portion of this map whose keys range from
 * {@code fromKey} to {@code toKey}.  If {@code fromKey} and
 * {@code toKey} are equal, the returned map is empty unless
 * {@code fromExclusive} and {@code toExclusive} are both true.  The
 * returned map is backed by this map, so changes in the returned map are
 * reflected in this map, and vice-versa.  The returned map supports all
 * optional map operations that this map supports.
 *
 * <p>The returned map will throw an {@code IllegalArgumentException}
 * on an attempt to insert a key outside of its range, or to construct a
 * submap either of whose endpoints lie outside its range.
 *
 * @param fromKey low endpoint of the keys in the returned map
 * @param fromInclusive {@code true} if the low endpoint
 *        is to be included in the returned view
 * @param toKey high endpoint of the keys in the returned map
 * @param toInclusive {@code true} if the high endpoint
 *        is to be included in the returned view
 * @return a view of the portion of this map whose keys range from
 *         {@code fromKey} to {@code toKey}
 * @throws ClassCastException if {@code fromKey} and {@code toKey}
 *         cannot be compared to one another using this map's comparator
 *         (or, if the map has no comparator, using natural ordering).
 *         Implementations may, but are not required to, throw this
 *         exception if {@code fromKey} or {@code toKey}
 *         cannot be compared to keys currently in the map.
 * @throws NullPointerException if {@code fromKey} or {@code toKey}
 *         is null and this map does not permit null keys
 * @throws IllegalArgumentException if {@code fromKey} is greater than
 *         {@code toKey}; or if this map itself has a restricted
 *         range, and {@code fromKey} or {@code toKey} lies
 *         outside the bounds of the range
 */
NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive,
                         K toKey,   boolean toInclusive);

Базовая структура данных для TreeMap - это красное и черное дерево, и вся сложность абстрагируется от интерфейса NavigableMap, что делает его довольно простым в использовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...