TreeMap lastKey查找时间

时间:2014-12-08 18:55:16

标签: java map treemap sortedmap

SortedMap接口的TreeMap.lastKey()部分的时间复杂度是多少?

oracle docs提到了TreeMaps:

  

此实现为containsKey,get,put和remove操作提供了有保证的log(n)时间成本。

2 个答案:

答案 0 :(得分:6)

根据Open JDK中的实现,它是O(log N):

public K lastKey() {
    return key(getLastEntry());
}
final Entry<K,V> getLastEntry() {
    Entry<K,V> p = root;
    if (p != null)
        while (p.right != null)
            p = p.right;
    return p;
}

lastKey()调用getLastEntry(),它继续采用正确的子树,直到没有其他节点可用。由于实现将树维持在平衡状态,因此迭代次数为O(log N)。

答案 1 :(得分:1)

如果TreeMap可以保证containsKey()的O(log(n))(就像它一样),那么它能够lastKey()进行java.util.TreeMap O(log(n))也是如此。任何可以肯定产生O(log(n))键查找的树结构也可以支持在O(log(n))中找到最大键。

虽然没有什么本身可以排除更糟糕的脑死亡实施,但我认为对{{1}}的可能性进行折扣是非常安全的。