Java TreeSet 类2025年4月1日 | 阅读10分钟 ![]() Java TreeSet 类实现了Set接口,它使用一棵树进行存储。它继承了AbstractSet类并实现了NavigableSet接口。TreeSet类的对象按升序存储。 Java TreeSet 类的重要注意事项如下:
TreeSet 类的内部工作原理TreeSet 是使用二叉搜索树实现的,该树是自平衡的,就像红黑树一样。因此,搜索、删除和添加等操作需要O(log(N))的时间。这是因为有自平衡树。它的目的是确保对于所有提到的操作,树的高度都不会超过 O(log(N))。因此,它是用于存储大量已排序数据并对其进行操作的有效数据结构之一。 TreeSet 功能的关键方面
TreeSet 类的同步如上所述,TreeSet 类不是同步的。这意味着,如果有多个线程并发访问一个 Tree set,并且其中一个访问线程修改了它,则必须手动进行同步。这通常是通过执行一些封装集合的对象同步技术来完成的。然而,在找不到这样的对象的情况下,必须使用Collections.synchronizedSet()方法来包装该集合。建议在创建时使用该方法,以避免对集合进行不同步访问。下面的代码片段展示了这一点。 TreeSet 类的同步如上所述,TreeSet 类不是同步的。这意味着如果多个线程并发访问一个 Tree set,并且其中一个访问线程修改了它,则必须手动进行同步。这通常是通过执行一些封装集合的对象同步来完成的。然而,在找不到这样的对象的情况下,必须使用Collections.synchronizedSet()方法来包装该集合。建议在创建时使用该方法,以避免对集合进行不同步访问。下面的代码片段展示了这一点。 TreeSet 类的继承层次结构如上图所示,Java TreeSet 类实现了NavigableSet接口。NavigableSet接口按继承顺序扩展了SortedSet、Set、Collection和Iterable接口。 Java 中的 TreeSet 类是 Java 集合框架的关键部分,它旨在以排序且唯一的方式存储元素,确保没有重复项。以下是其层次结构的关键点: SortedSet 接口:TreeSet 直接实现 SortedSet 接口,该接口扩展了基本的 Set 接口。此接口引入了用于维护元素之间顺序的操作方法,并支持范围视图功能,这对于有序数据操作至关重要。 NavigableSet 接口:位于 SortedSet 的下方,NavigableSet 接口增加了高级导航功能。它允许 TreeSet 根据元素相对于集合中其他元素的精确关系来检索元素,从而增强了其高效数据查询和操作的功能。 效率:TreeSet 由使用红黑树结构的 TreeMap 支持,可以以对数时间复杂度执行添加、删除和包含等基本操作,使其成为需要快速数据处理的高性能应用程序的理想选择。 TreeSet 类声明让我们看看 java.util.TreeSet 类的声明。 声明的组成部分
Java TreeSet 类构造函数
Java TreeSet 类的方法
Java TreeSet 示例Java TreeSet 示例 1让我们看一个简单的 Java TreeSet 示例。 文件名:TreeSet1.java 输出 Ajay Ravi Vijay Java TreeSet 示例 2让我们看一个按降序遍历元素的示例。 文件名:TreeSet2.java 输出 Traversing element through Iterator in descending order Vijay Ravi Ajay Traversing element through NavigableSet in descending order Vijay Ravi Ajay Java TreeSet 示例 3让我们看一个检索和删除最高和最低值的示例。 文件名:TreeSet3.java 输出 Lowest Value: 12 Highest Value: 66 Java TreeSet 示例 4在此示例中,我们将执行各种 NavigableSet 操作。 文件名:TreeSet4.java 输出 Initial Set: [A, B, C, D, E] Reverse Set: [E, D, C, B, A] Head Set: [A, B, C] SubSet: [B, C, D, E] TailSet: [D, E] Java TreeSet 示例 5在此示例中,我们将执行各种 SortedSetSet 操作。 文件名:TreeSet5.java 输出 Intial Set: [A, B, C, D, E] Head Set: [A, B] SubSet: [A, B, C, D] TailSet: [C, D, E] Java TreeSet 示例:图书让我们看一个 TreeSet 示例,其中我们向集合中添加书籍并打印所有书籍。TreeSet 中的元素必须是 Comparable 类型。String 和包装类默认是 Comparable 的。要在 TreeSet 中添加用户定义的对象,您需要实现 Comparable 接口。 文件名:TreeSetExample.java 输出 101 Data Communications & Networking Forouzan Mc Graw Hill 4 121 Let us C Yashwant Kanetkar BPB 8 233 Operating System Galvin Wiley 6 TreeSet 中的 ClassCast Exception如果我们添加了一个未实现 Comparable 接口的类的对象,则会引发 ClassCast Exception。请看以下程序。 文件名:ClassCastExceptionTreeSet.java 输出 Exception in thread "main" java.lang.ClassCastException: class Employee cannot be cast to class java.lang.Comparable (Employee is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap') at java.base/java.util.TreeMap.compare(TreeMap.java:1569) at java.base/java.util.TreeMap.addEntryToEmptyMap(TreeMap.java:776) at java.base/java.util.TreeMap.put(TreeMap.java:785) at java.base/java.util.TreeMap.put(TreeMap.java:534) at java.base/java.util.TreeSet.add(TreeSet.java:255) at ClassCastExceptionTreeSet.main(ClassCastExceptionTreeSet.java:52) 解释:在上面的程序中,需要实现 Comparable 接口。这是因为 TreeSet 维护排序顺序,并且为了进行排序,必须比较插入 TreeSet 的不同对象,这可以通过实现 Comparable 接口来实现。 TreeSet 与 HashSet
下一个主题Java PriorityQueue 类 |
我们请求您订阅我们的新闻通讯以获取最新更新。