我几乎没有与我在这里收集框架TreeSet
相关的问题。
TreeSet
和ArrayList
类之间唯一的功能区别是TreeSet
中唯一元素和元素的约束吗?
前缀Tree
的存在会产生将TreeSet
可视化为分层数据结构或线性数据结构的混淆。数学集是线性数据结构,而计算中的名称Tree
表示分层数据结构。
Tree
数据结构与Java TreeSet
或名称TreeSet
之间是否存在任何相似性/关系只是巧合?
我的意思是,看起来这个集合与父子关系没有任何关系。
编辑 - 看起来,我对我想要问的内容感到困惑,在考虑过评论和答案之后澄清了这些内容。我想,我的主要问题应该是"为什么数学集DS(已排序或未排序)是通过树实现的?"这是How to implement Set data structure?
的副本答案 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对象来为它们设置排序规则。