Java TreeSet 内部工作原理2025年3月27日 | 阅读 3 分钟 TreeSet 并不是最常用的 Java 集合类。但在某些情况下,它比其他集合类更受青睐。了解 TreeSet 在哪些情况下比其他集合类更受欢迎以及它是如何实现的至关重要。这对于面试准备也很重要;有时,面试官可能会询问您 TreeSet 类的内部工作原理。 TreeSet 与 HashSet 类非常相似。两者之间最大的区别在于它们使用的数据结构。HashSet 使用 Hashtable,而 TreeSet 使用自平衡树。 什么是 TreeSetTreeSet 是 Java Collection Framework 中的一个类,用于存储树形数据结构。它使用树形数据结构来存储和维护对象。TreeSet 类是 Set 接口的实现类。 TreeSet 以升序存储对象,这是树的自然排序。我们也可以在创建 TreeSet 时指定一个比较器来根据它对元素进行排序。它实现了 SortedSet 和 NavigableSet 接口,以维护和导航元素的顺序。 它是一个有用的类,用于查找树中可用元素之间的比较,例如大于、小于等。 TreeSet 类的一些主要特性如下:
声明 TreeSet 类可以声明如下: 考虑下面的示例来理解 TreeSet 的行为: 输出 [Hibernate, Java, Spring] 从上面的示例中,我们可以看到 TreeSet 不允许重复元素,并且元素会按升序排序。让我们了解 TreeSet 的内部工作原理。 TreeSet 内部工作原理TreeSet 的数据结构是 TreeMap;它包含 SortedSet 和 NavigableSet 接口,以保持元素按升序排序并通过树进行导航。 一旦我们创建了 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。 ![]() 下一主题Java 序列化的实时示例 |
在本节中,我们将学习什么是史密斯数,并创建 Java 程序来检查给定数字是否为史密斯数。史密斯数程序经常在 Java 编码测试和学术界出现。史密斯数一个史密斯数是一个复合数,其...
阅读 4 分钟
给定一个整数数组“arr”和一个整数 k。我们有一个空栈和以下两个操作:“Push”和“Pop”。我们还有一个区间为 [1, k] 的整数流。使用两个栈过程将数字推入栈中...
阅读 16 分钟
在本节中,我们将学习 Java 中二叉树的右视图以及实现它的不同方法。在二叉树的右视图中,我们只打印当二叉树...时可见的节点。
阅读 4 分钟
Alpha-beta 剪枝是一种强大的算法,用于博弈论和决策问题,以优化搜索过程并显著减少评估的节点数量。它在具有大型状态空间的博弈(如国际象棋或井字游戏)中特别有效。在本节中,我们将...
阅读 6 分钟
级数 12+32+52+⋯+(2*n−1)2 表示初始奇数的平方之和。序列中的每一项都是奇数的平方,从 1 开始,后一项增加 2。这个级数很有趣,因为:涉及的数字是奇数...
阅读 4 分钟
java.nio.DoubleBuffer 有一个 mark() 函数。通过 DoubleBuffer 类,将此 DoubleBuffer 的当前位置标记为缓冲区的标记。语法:public DoubleBuffer mark()返回值:将缓冲区的标记设置为当前位置,并返回此方法返回的缓冲区。示例……
阅读 3 分钟
Permutation Java 要确定序列元素的字典序排列,请应用排列方法。它指的是按字典序将数组的项重新排列为下一个更大的排列。重新排列项以产生字典序排列是基础...
阅读 6 分钟
Java 中的 MulticastSocket 类是 DatagramSocket 类的子类,用于发送和接收多播数据报。多播数据报是一种发送到网络上主机组的数据报。MulticastSocket 类提供了加入和离开...
7 分钟阅读
Java 中的 assert 关键字用于调试目的。它主要用于通过在表达式求值为 false 时抛出 AssertionError 来测试代码中的假设。断言通常在开发和测试期间使用,但默认情况下在运行时禁用。要...
阅读 3 分钟
Java 是一种强大而灵活的编程语言,长期以来一直是软件开发领域的支柱。自 20 世纪 90 年代中期推出以来,Java 一直保持着相关性和受欢迎度,使其成为任何希望进入编程行业的个人的绝佳选择,或者...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India