2016-02-05 79 views
-1

我有几个问题与我收集框架的TreeSet有关。TreeSet与树

  1. TreeSetArrayList类之间的唯一的功能差异是要进行排序太TreeSet独特的元素和元素的约束?

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

    Tree数据结构和Java的TreeSet或名称TreeSet真的有什么相似之处吗?

我的意思是,它似乎并没有与父母 - 子女关系有任何关系。

EDIT - 看起来,我很困惑我想问什么,在思考过评论和答案后得到了澄清。我想,我的主要问题应该是“为什么数学集DS(排序或未排序)通过树实现?”这是一个重复的How to implement Set data structure?

+2

看那[用于'TreeMap.getEntry'源代码(http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/TreeMap .java#336),其中'TreeSet.get'使用。那里有一个明显的左/右下降到一个树木结构。 –

+1

读一[文档】(http://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html)有时是一个很好的做法。 – agad

+0

谢谢安迪和阿加德。 –

回答

1

是TreeSet中和ArrayList 类之间的唯一的功能差异是进行排序,独特的元素和元素的约束太 在TreeSet中?

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

前缀树的存在会产生一个关于将TreeSet作为分层数据结构或线性树形结构进行可视化的混淆。数学 集是线性数据结构,而计算中的名称树表示 分层结构。

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

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

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

在一个侧面说明,因为这两个是不同的数据结构,时间TreeSet中的复杂性,从ArrayList中为同一组的操作完全是。例如:添加ArrayList是O(1),但对于TreeSet它是O(logn),搜索arrayList是O(n),对于TreeSet是O(logn)等等......

0

在使用方面,它只是一个Set,再加上一些额外的好东西,如具有明确的序列。但是,它在内部是作为一个树实现的。

这里的命名惯例与HashSet类似,另一Set内部哈希表来实现。

1

TreeSet是真正的树,不是巧合。 所以和Arraylist有很多不同之处。例如性能(我的意思是Big-O)是完全不同的。

0

内部TreeSet是呈现为树状结构。所以这个事实会影响操作的复杂性。大多数操作都需要基于TRee的结构的O(log n)操作,但基于数组的结构在大多数使用的只读操作的恒定时间内工作。所以HashSet基于数组,并允许const时间访问它的值。

此外,他们提供不同的功能。 HashSet只是存储元素。它以线性的方式表现得像你悲伤的数学集。 但TreeSet中提供了更多的操作:先来看看它实现NavigableSet和SortedSer接口。 TreeSet的元素总是被排序。但同时他们需要为它们设置排序规则,通过推动Comparable接口或使用侧Comparator对象来提供排序规则。