【问题标题】:TreeMap removing all keys greater than a certain keyTreeMap 删除所有大于某个键的键
【发布时间】:2014-04-10 01:23:43
【问题描述】:

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

据我所知,用 Java 实现的 TreeMap 是一棵红黑树,它是二叉搜索树。所以我应该在删除子树时得到O(n)
但是我找不到任何方法可以做到这一点,除了制作一个尾视图并一个一个删除,这需要O(logn)

实现这个功能有什么好主意吗?我相信 treeMap 是正确的数据结构,应该能够做到这一点。

提前致谢

【问题讨论】:

  • 不成立。它是一棵红黑树并不意味着你可以在 O(N) 中删除一个子树。
  • 什么是 N ? (N=lg(n)) ?问题是关于在 O(lg(n)) 而不是 O(n) 中删除它

标签: java binary-search-tree treemap


【解决方案1】:

很简单。不要一个接一个地删除条目,而是使用Map.clear() 删除元素。在代码中:

map.tailMap(key).clear();

【讨论】:

  • 这会或多或少地删除子树?
  • @Tyler 标题说“删除所有大于某个键的键”,这就是它的作用。
  • 但它会在 O(N) 时间内运行吗? 那是的问题。
  • 有没有其他方法可以通过SortedMap 做到这一点?
  • 这也不是问题。问题是如何在 O(N) 中做到这一点。答案很可能是你不能。
【解决方案2】:
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);
     }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 2011-01-21
    • 2017-12-08
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多