我有以下TreeMap:
private Map<Date,WeekSchedule> weeks = new TreeMap<Date,WeekSchedule>();
我需要删除所有日期都在给定值之前的条目。
最有效的方法是什么?
这是我到目前为止所做的:
public void removeWeeksBefore(Date monDate){
for (Map.Entry<Date, WeekSchedule> entry : weeks.entrySet()){
if(entry.getKey().before(monDate)){
weeks.remove(entry.getKey()); //This will destroy the iterator
}else{
return;
}
}
}
答案 0 :(得分:10)
最高效的方式可能会将其存储为SortedMap
,然后使用一行
map.headMap(monDate).clear();
答案 1 :(得分:3)
由于您不关心地图值,因此您只需要遍历keySet
:
Iterator<Date> iter = weeks.keySet().iterator();
while (iter.hasNext()) {
if (iter.next().before(monDate))
iter.remove();
else
return; // since TreeMap is sorted by key
}
答案 2 :(得分:1)
如果要修改Iterable
,则可以使用迭代器而不是for-each循环。
for (Iterator<Entry<Date, WeekSchedule>> i = weeks.entrySet().iterator() ; i.hasNext(); ){
Entry<Date, WeekSchedule> entry = i.next();
if(entry.getKey().before(monDate)){
i.remove();
}else{
return;
}
}