SortedMap接口的TreeMap.lastKey()部分的时间复杂度是多少?
oracle docs提到了TreeMaps:
此实现为containsKey,get,put和remove操作提供了有保证的log(n)时间成本。
答案 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}}的可能性进行折扣是非常安全的。