TreeMap删除大于某个键的所有键

时间:2014-04-10 01:23:43

标签: java binary-search-tree treemap

在项目中,我需要删除键值大于某个键的所有对象(键类型为Date,如果重要的话)。

据我所知,在Java中实现的TreeMap是一个红黑树,它是一个二叉搜索树。因此,删除子树时我应该O(n) 但除了制作尾部视图并逐个删除之外,我找不到任何方法来执行此操作,这需要O(logn)

实现此功能的任何好主意?我相信treeMap是正确使用的数据结构,应该能够做到这一点。

提前致谢

2 个答案:

答案 0 :(得分:7)

非常简单。不要逐个删除条目,而是使用Map.clear()删除元素。在代码中:

map.tailMap(key).clear();

答案 1 :(得分:0)

public class TreeMapDemo {
    public static void main(String[] args) {
            // creating maps
            TreeMap<Integer, String> treemap = new TreeMap<Integer, String>();
            SortedMap<Integer, String> treemapincl = new TreeMap<Integer, String>();

            // populating tree map
            treemap.put(2, "two");
            treemap.put(1, "one");
            treemap.put(3, "three");
            treemap.put(6, "six");
            treemap.put(5, "five");

            System.out.println("Getting tail map");
            treemap.tailMap(3).clear();

            System.out.println("Tail map values: " + treemapincl);
            System.out.println("Tree map values: " + treemap);
     }
}

这将删除树形图中的元素。