TreeSet迭代的时间复杂度是多少?

时间:2010-05-03 15:45:30

标签: java algorithm data-structures treeset

在我的代码中,Java TreeSet迭代是主要的时间因素。在查看系统时,我认为它是O(n)复杂性。任何人都可以验证这个吗?

我在想通过提供从子节点到父节点的向后链接,我可以提高性能。

2 个答案:

答案 0 :(得分:4)

TreeSet迭代当然是O(n),正如可以从任何合理的树行走算法中得到的那样。

  

我在想通过提供链接   从子节点向后转移到父节点   节点我可以提高性能。

TreeMapTreeSet所基于的)已经有这样的父引用。这是所有归结为的方法:

private Entry<K,V> successor(Entry<K,V> t) {
    if (t == null)
        return null;
    else if (t.right != null) {
        Entry<K,V> p = t.right;
        while (p.left != null)
            p = p.left;
        return p;
    } else {
        Entry<K,V> p = t.parent;
        Entry<K,V> ch = t;
        while (p != null && ch == p.right) {
            ch = p;
            p = p.parent;
        }
        return p;
    }
}

答案 1 :(得分:1)

您是否考虑过更改TreeSet的副本?如果在TreeSet迭代中花费了支配时间(而不是修改它),那么将TreeSet复制到数组或ArrayList(仅在更改时)并且仅迭代此数组/ ArrayList几乎可以消除TreeSet迭代的成本。