2016-02-12 65 views
2

我有一個地圖存儲的時間序列數據在以下格式獲取的範圍數據從無窮時間序列

HashMap<Date,Double> infiniteTimeSeries; 

可變infiniteTimeSeries可以具有從1AD甚至2100AD數據。 當用戶詢問1970年1月1日至1972年1月1日之間的值時,我需要選擇僅對應於所請求的時間範圍的數據。

有沒有簡單的方法來做到這一點?像圖書館一樣。 我試圖避免循環在地圖上,在地圖甚至可以在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