为什么包含(Object)在TreeMap中是log(n),在PriorityQueue中是O(n),而PriorityQueue在内部使用二叉树(二进制堆)?

时间:2018-06-16 07:31:24

标签: java tree complexity-theory priority-queue

为什么contains(Object)在TreeMap中是log(n),在PriorityQueue中是O(n),而PriorityQueue在内部使用二进制堆(特殊种类的二叉树)?它们都使用树,但PriorityQueue包含的是O(n)。

1 个答案:

答案 0 :(得分:2)

并非所有二叉树都支持O(log(N))搜索。平衡二进制搜索树支持这一点,但PriorityQueue底层的树是二进制堆,而不是二叉搜索树。使用二叉搜索树,您可以确定在每个步骤中搜索哪个子树。对于二进制堆,堆不变量不足以确定在哪里查找元素。