Java TreeSet如何维护add的O(logN)?

Java TreeSet如何维护add的O(logN)?,java,tree,binary-search-tree,treeset,Java,Tree,Binary Search Tree,Treeset,javatreeset类可以为add方法维护O(logN)成本。如果数据按排序顺序输入,这是如何工作的 既然二元搜索树的add方法在给定排序数据时会退化为O(N),那么为什么树集不会发生这种情况呢?您的错误在于认为树集使用简单的二元搜索树。 没有。它使用自平衡二叉搜索树 Javadoc说: ANavigableSet基于A的实现 Javadoc说: 基于NavigableMap实现的红黑树。[……] 此实现为containsKey、get、put和remove操作提供了有保证的日志(n)时间成本

javatreeset类可以为add方法维护O(logN)成本。如果数据按排序顺序输入,这是如何工作的


既然二元搜索树的add方法在给定排序数据时会退化为O(N),那么为什么树集不会发生这种情况呢?

您的错误在于认为树集使用简单的二元搜索树。
没有。它使用自平衡二叉搜索树

Javadoc说:

A
NavigableSet
基于A的实现

Javadoc说:

基于
NavigableMap
实现的红黑树。[……]

此实现为
containsKey
get
put
remove
操作提供了有保证的日志(n)时间成本。算法是对Cormen、Leiserson和Rivest的算法介绍中的算法的改编

所以,如果你想看到特定算法的描述,找到那本书并阅读它

你也可以做一些事情,看看红黑树是如何工作的,例如,看,上面写着:

红黑树是计算机科学中的一种

[……]

树的平衡不是完美的,但它足以保证在
O(logn)
时间内进行搜索,其中n是树中元素的总数。插入和删除操作以及树的重新排列和重新排序也在
O(logn)
时间内执行


然后,它将详细介绍这一切的工作原理。

欢迎来到StackOverflow

当给定排序数据时,二叉搜索树的加法将退化为O(N)

在TreeSet类中,这是不正确的

TreeSet类的实现依赖于红黑树数据结构。基本上,在将新元素添加到红黑树之后,该树将按照一些规则重新平衡

我建议你读一读关于这个主题的文章