TreeSet与树

时间:2016-02-05 12:27:05

标签: java data-structures collections

我几乎没有与我在这里收集框架TreeSet相关的问题。

  1. TreeSetArrayList类之间唯一的功能区别是TreeSet中唯一元素和元素的约束吗?

  2. 前缀Tree的存在会产生将TreeSet可视化为分层数据结构或线性数据结构的混淆。数学集是线性数据结构,而计算中的名称Tree表示分层数据结构。

    Tree数据结构与Java TreeSet或名称TreeSet之间是否存在任何相似性/关系只是巧合?

  3. 我的意思是,看起来这个集合与父子关系没有任何关系。

    编辑 - 看起来,我对我想要问的内容感到困惑,在考虑过评论和答案之后澄清了这些内容。我想,我的主要问题应该是"为什么数学集DS(已排序或未排序)是通过树实现的?"这是How to implement Set data structure?

    的副本

4 个答案:

答案 0 :(得分:1)

TreeSet是真正的树,而不是巧合。 所以与Arraylist有很多区别。  例如,表现(我的意思是Big-O)完全不同。

答案 1 :(得分:1)

  

TreeSet和ArrayList之间唯一的功能区别   classes是对唯一元素和元素进行排序的约束   在TreeSet中?

除了内部实现之外,这是主要区别,这使TreeSet能够提供子集,尾部,headSet等函数,这些函数对于ArrayList是不可能的。

  

前缀树的存在会造成关于可视化的混乱   TreeSet作为分层数据结构或线性数据结构。数学的   集合是线性数据结构,而计算中的名称树表示   等级的。

是的,它是层次结构。在内部,实现是一个红黑二叉树。

  

树数据结构之间是否存在任何相似性/关系?   和Java的TreeSet或名称TreeSet只是一个巧合?

内部实现是一个R-B二叉树。

另一方面,由于这两者是不同的数据结构,因此TreeSet的时间复杂度完全来自ArrayList,用于同一组操作。例如:add ArrayList是O(1)但是对于TreeSet,它是O(logn),搜索arrayList是O(n),而TreeSet的搜索是O(logn)等等......

答案 2 :(得分:0)

就使用而言,它只是一个Set,加上一些额外的好东西,比如有一个明确的序列。但是,它在内部实现为树。

此处的命名约定与HashSet类似,另一个Set内部实现为哈希表。

答案 3 :(得分:0)

内部TreeSet作为Tree结构存在。所以这个事实会影响运营的复杂性。对于基于TRee的结构,大多数操作需要O(log n)动作,但是对于大多数使用的只读操作,基于阵列的结构在恒定时间内工作。因此,HashSet基于数组,允许const时间访问其值。

它们还提供不同的功能。 HashSet只存储元素。它的行为就像数学设置一样悲伤,以线性方式。 但是TreeSet提供了更多操作:看看它实现的NavigableSet和SortedSer接口。 TreeSet的元素始终排序。但与此同时,他们需要通过强制使用Comparable接口或使用side Comparator对象来为它们设置排序规则。