2016-02-12 5 views
2

У меня есть карта хранения временных данных в следующем форматеПолучение диапазона данных из бесконечного временного ряда

HashMap<Date,Double> infiniteTimeSeries; 

Переменная infiniteTimeSeries может иметь данные 1AD к даже 2100AD. Когда пользователь запрашивает значения между январем-1-1970 годами до января-1-1972 года, мне нужно выбрать данные, соответствующие только запрошенному временному диапазону.

Есть ли простой способ сделать это? Как библиотека. Я пытаюсь избежать зацикливания на карте, как карта может даже 100 лет данных и итерации, как 300000 элементов для короткого требуемого интервала времени будет влиять на производительность плохо

Пожалуйста, просьбу сообщить ваши ценные предложения

ответ

5

Вы можете использовать TreeMap вместо HashMap.

TreeMap сортируется по умолчанию естественным порядком его ключей. Класс java.util.Date определяет естественный порядок, реализуя Comparable<Date>.

Из TreeMap вы можете получить подмножество карты по диапазону ключей, используя TreeMap.subMap(). Эта версия распространяется от fromKey включительно до toKey эксклюзив. (Соседний позволяет другие варианты.)

public SortedMap<K,V> subMap(K fromKey, 
         K toKey) 

Кстати, если вы работаете в Java 8, вы можете рассмотреть возможность использования нового Instant класса вместо старшего класса Date. Instant также реализует Comparable.

+0

Это сработало ... Большое спасибо – naga1990

Смежные вопросы