删除小于x的TreeMap条目

时间:2014-05-29 15:12:12

标签: java map treemap

我有以下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;
        }
    }
}

3 个答案:

答案 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;
        }
    }