2014-03-19 48 views
0

我有一個類存儲日期作爲關鍵和價格作爲價值。我的數據結構存儲大約5M條目。當我想要檢索某個日期範圍內的數據時,我將遍歷數據結構並檢查當前數據是否在日期範圍內。更好的數據結構檢索日期之間的數據

例如

if (startDate >= data.date && data.date <= endDate) 
    //do something 

但是,這是非常低效的。有一個更好的方法嗎?

回答

1

如果內存/性能是不是約束*,你可以簡單地用一個TreeMap,其中有一個subMap method,讓您的時間窗口上進行過濾:

TreeMap<Date, Double> data = ...; 
for (Double price : data.subMap(startDate, true, endDate, true).values()) { 
    //do something with price 
} 

*即。如果您不需要將價格保持爲原始的雙倍數,例如

+0

謝謝。這正是我正在尋找的。 – jerr

1
  • 請確保數據是按鍵(即按日期)排序的。只要你還沒有達到結束日期
  • 使用二進制搜索來查找開始日期
  • 枚舉

編輯:是的,使用TreeMap自動化工作得很好。不知道你是否被允許改變你的數據結構。