Java TreeSet 内部工作原理

2025年3月27日 | 阅读 3 分钟

TreeSet 并不是最常用的 Java 集合类。但在某些情况下,它比其他集合类更受青睐。了解 TreeSet 在哪些情况下比其他集合类更受欢迎以及它是如何实现的至关重要。这对于面试准备也很重要;有时,面试官可能会询问您 TreeSet 类的内部工作原理。

TreeSet 与 HashSet 类非常相似。两者之间最大的区别在于它们使用的数据结构。HashSet 使用 Hashtable,而 TreeSet 使用自平衡树。

什么是 TreeSet

TreeSetJava Collection Framework 中的一个类,用于存储树形数据结构。它使用树形数据结构来存储和维护对象。TreeSet 类是 Set 接口的实现类。

TreeSet 以升序存储对象,这是树的自然排序。我们也可以在创建 TreeSet 时指定一个比较器来根据它对元素进行排序。它实现了 SortedSetNavigableSet 接口,以维护和导航元素的顺序。

它是一个有用的类,用于查找树中可用元素之间的比较,例如大于、小于等。

TreeSet 类的一些主要特性如下:

  • 它包含唯一元素,与 HashSet 类一样。
  • 它提供了更快的访问和检索元素的方式。
  • 它不允许存储 null 元素。
  • 它是一个非同步类。
  • 它以升序存储和维护元素。
  • TreeSet 类的包是 java.util。
  • 它实现了 SortedSet 和 NavigableSet 接口,以保持元素的排序和结构。
  • 它还实现了 Cloneable 和 Serializable 接口。
  • 它扩展了 AbstractSet 类。

声明

TreeSet 类可以声明如下:

考虑下面的示例来理解 TreeSet 的行为:

输出

[Hibernate, Java, Spring]

从上面的示例中,我们可以看到 TreeSet 不允许重复元素,并且元素会按升序排序。让我们了解 TreeSet 的内部工作原理。

TreeSet 内部工作原理

TreeSet 的数据结构是 TreeMap;它包含 SortedSetNavigableSet 接口,以保持元素按升序排序并通过树进行导航。

一旦我们创建了 TreeSet,JVM 就会创建一个 TreeMap 来存储其中的元素并对其执行所有操作。它的工作原理与 HashSet 类似。

当我们实现 TreeSet 时,Java 编译器将执行以下代码:

它实例化一个 TreeMap 并执行以下代码来实现接口:

它使用 NavigableMap 自动为元素分配相应的位置。TreeMap 不能有重复值。因此,当我们执行 add() 方法时,它会执行 put 操作并将值添加到树中。

默认情况下,它按升序排序值,但我们可以指定比较器以任何特定顺序排序元素。它使用比较器或可比较变量来比较元素。

让我们了解 TreeSet 内部如何执行排序。

TreeSet 内部如何执行排序

当我们实现 TreeSet 时,它会创建一个 TreeMap 来存储元素。它根据自然顺序或使用用户定义的比较器对元素进行排序。

当创建 TreeSet 对象时,它会自动调用默认构造函数并创建一个 TreeMap 对象,并将比较器设置为 null。Java 编译器执行以下代码:

当我们向 TreeMap 添加元素时,它会将每个元素与其他元素进行比较,然后将其放入 TreeMap。它使用 comparable 来比较对象。put() 方法会检查 comparator 对象是否为 null。

How TreeSet Works Internally in Java