我需要一些性能方面的建議。我有一個Map<DateTime, String>
。我需要這樣的東西下面的方法:找到下一個最小的鍵(需要性能建議)
Map<DateTime, BigDecimal> map; // about 50 entries. Btw: Which impl to choose?
BigDecimal findNextSmaller(DateTime input) {
DateTime tmp = null;
for(DateTime d : map.keySet()) {
if(tmp == null && d < input) {
tmp = d;
}
if(d < input && d > tmp) {
tmp = d;
}
}
return map.get(tmp);
}
所以基本上我只是遍歷我Map
的密鑰集,並設法找到它是下一個最小相比input
的關鍵。
此方法將連續被調用約1,000,000次:
BigDecimal sum;
List<Item> items; // about 1.000.000 Items
for(Item i : items) {
sum = sum.add(findNextSmaller(i.getDateTime()));
}
現在我正在尋找一種方法,使事情更快。
我的第一個想法是在Map
的keySet中輸入OrderedList
。所以平均來說,我只需要重複DateTime
的一半。然後,只需執行map.get(dateTimeFromOrderedList)
即可獲取匹配值。
但是,我能做些什麼嗎?