Java TreeSet 类扩展了 AbstractSet 并实现了 NavigableSet
接口。它与 HashSet 类非常相似,只是它以排序 的方式存储元素。
排序顺序可以是自然顺序,也可以是树集创建时提供的比较器,具体取决于哪个构造函数被使用。
TreeSet 类扩展了 AbstractSet
类并实现了 NavigableSet
接口。 NavigableSet 接口以分层顺序扩展 SortedSet
。
class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable { //implementation }
树集层次结构
AbstractSet
类,该类扩展了 AbstractCollection
类。SortedSet
接口的NavigableSet
接口。ConcurrentModificationException
除了通过迭代器自己的 remove()
方法。TreeSet 有四种可能的构造函数:
true
,否则返回 false
。true
,否则返回 false
。true
,否则返回 false
。//1. Create TreeSet TreeSet<String> TreeSet = new TreeSet<>(); //2. Add elements to TreeSet TreeSet.add("A"); TreeSet.add("B"); TreeSet.add("C"); TreeSet.add("D"); TreeSet.add("E"); System.out.println(TreeSet); //3. Check if element exists boolean found = TreeSet.contains("A"); //true System.out.println(found); //4. Remove an element TreeSet.remove("D"); //5. Iterate over values Iterator<String> itr = TreeSet.iterator(); while(itr.hasNext()) { String value = itr.next(); System.out.println("Value: " + value); }
程序输出。
[A, B, C, D, E] true Value: A Value: B Value: C Value: E
使用 toArrray() 方法将 TreeSet 转换为 array 的 Java 示例。
TreeSet<String> TreeSet = new TreeSet<>(); TreeSet.add("A"); TreeSet.add("B"); TreeSet.add("C"); TreeSet.add("D"); TreeSet.add("E"); String[] values = new String[TreeSet.size()]; TreeSet.toArray(values); System.out.println(Arrays.toString(values));
程序输出。
[A, B, C, D, E]
使用 Java 8 流 API 将 TreeSet 转换为 arraylist 的 Java 示例。
TreeSet<String> TreeSet = new TreeSet<>(); TreeSet.add("A"); TreeSet.add("B"); TreeSet.add("C"); TreeSet.add("D"); TreeSet.add("E"); List<String> valuesList = TreeSet.stream().collect(Collectors.toList()); System.out.println(valuesList);
程序输出。
[A, B, C, D, E]
TreeSet 与 HashSet(唯一元素)非常相似,并提供可预测的迭代顺序(已排序)。可以使用自定义比较器覆盖排序顺序。
TreeSet 在底层使用了红黑树。所以这个集合可以被认为是一个动态搜索树。当你需要一个频繁读写操作的结构,又要保持有序时,TreeSet 是一个不错的选择。
如果你想让一个集合保持排序并且你主要是追加元素,那么带有比较器的 TreeSet 是你最好的选择。
从上面的讨论中,很明显,在我们想要以排序方式处理重复记录的情况下,TreeSet 是非常有用的集合类。它还为基本操作提供可预测的性能。
如果不需要元素的排序顺序,那么建议改用轻量级的 HashSet 和 HashMap。
在评论中将您与 Java 中的 TreeSet 相关的问题告诉我。
快乐学习!!
参考:
地址:https://www.cundage.com/article/java-treeset-class.html