【问题标题】:TreeSet Vs Tree树集与树
【发布时间】:2016-02-05 12:27:04
【问题描述】:

我有几个与 Collection Frameworks 的 TreeSet 相关的问题,我在这里提出。

  1. TreeSetArrayList 类之间的唯一功能区别是唯一元素的约束以及在 TreeSet 中的元素也被排序吗?

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

    Tree 数据结构和 Java 的 TreeSet 或名称 TreeSet 之间真的有任何相似/关系只是巧合吗?

我的意思是,这个集合似乎与父子关系没有任何关系。

编辑 - 看起来,在思考 cmets 和答案后,我对要问的问题感到困惑。我想,我的主要问题应该是“为什么数学集合 DS(排序或未排序)是通过树实现的?”这是How to implement Set data structure?的副本

【问题讨论】:

标签: java data-structures collections


【解决方案1】:

是TreeSet和ArrayList唯一的功能区别 类是唯一元素的约束,并且元素也被排序 在树集中?

这是主要的区别,除了内部实现之外,这使得 TreeSet 能够提供像子集、尾集、头集这样的函数,而这些函数是 ArrayList 无法实现的。

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

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

树数据结构之间真的有任何相似性/关系吗 和 Java 的 TreeSet 或命名 TreeSet 只是巧合?

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

附带说明,由于这两个是不同的数据结构,因此 TreeSet 的时间复杂度完全来自 ArrayList 用于同一组操作。例如:添加 ArrayList 为 O(1),但 TreeSet 为 O(logn),搜索 arrayList 为 O(n),而 TreeSet 为 O(logn),依此类推...

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2010-11-30
          • 2011-02-13
          • 1970-01-01
          • 2011-09-06
          • 1970-01-01
          • 2011-02-13
          • 2014-04-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多