TreeSet 的层次结构
TreeSet 类扩展了 AbstractSet
类并实现了 NavigableSet
接口。
NavigableSet 接口以分层顺序扩展了 SortedSet
。
class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable { //implementation }
TreeSet的方法
- boolean add(E e) :如果尚未存在,则将指定的元素添加到 Set 中。
- Comparator Comparator() :返回用于对该集合中的元素进行排序的比较器,如果该集合使用其元素的自然顺序,则返回 null。
- Object first() :返回此集合中当前的第一个(最低)元素。
- Object last() :返回此集合中当前的最后一个(最大)元素。
- void clear() :从 TreeSet 中删除所有元素。
- boolean contains(Object o) :如果 TreeSet 包含指定元素,则返回
true
,否则返回false
。 - boolean isEmpty() : 如果 TreeSet 不包含元素,则返回
true
,否则返回false
。 - int size() :返回 TreeSet 中元素的数量。
- Iterator<E> iterator() :以升序返回此集合中元素的迭代器。
- Iterator<E>DescingIterator() :以降序返回此集合中元素的迭代器。
- NavigableSet<E>DescingSet() :返回此集合中包含的元素的逆序视图。
- boolean remove(Object o) :如果指定的元素存在,则从 TreeSet 中移除指定的元素并返回
true
,否则返回false
。 - Object clone() :返回 TreeSet 的浅拷贝。
- Spliterator<E> spliterator() :在此 TreeSet 中的元素上创建一个后期绑定和快速失败的 Spliterator。它与 treeset 提供的顺序相同。
TreeSet的特性
- 它扩展了
AbstractSet
类,该类扩展了AbstractCollection
类。 - 它实现了扩展了 SortedSet 接口的 NavigableSet 接口。
- TreeSet 中不允许出现重复值。
- TreeSet 中不允许为 NULL。
- 它是一个有序集合,按排序顺序存储元素。
- 与 HashSet 一样,此类为基本操作(添加、删除、包含和大小)提供恒定的时间性能。
- TreeSet 不允许插入异构对象,因为它必须比较对象以确定排序顺序。
- TreeSet 不同步。
如果多个线程同时访问一个散列集,并且至少有一个线程修改了该集,则必须在外部进行同步。
- 使用 Collections.synchronizedSortedSet(new TreeSet()) 方法获取同步的 TreeSet。
- 此类的迭代器方法返回的迭代器是快速失败的,如果在创建迭代器后的任何时间修改了集合,则可能会抛出“ConcurrentModificationException”,除非通过迭代器自己的“remove()”方法。
- TreeSet 还实现了 Searlizable 和 Cloneable 接口。
Java TreeSet 类扩展了 AbstractSet 并实现了 NavigableSet 接口。
它与 HashSet 类非常相似,不同之处在于它按排序顺序存储元素。
on
it
road
.com
TreeSet 的构造函数
TreeSet 有四个可能的构造函数:
- TreeSet():创建一个新的空树集,根据其元素的自然顺序进行排序。
- TreeSet(Comparator c):创建一个新的空树集,根据指定的比较器进行排序。
- TreeSet(SortedSet s):创建一个新的树集,包含与指定的有序集相同的元素并使用相同的顺序。
- TreeSet(Collection c):创建一个包含指定集合中元素的新树集,根据其元素的自然顺序进行排序。
TreeSet示例
TreeSet 添加元素、删除元素、迭代TreeSet示例
//1. 创建 TreeSet TreeSet<String> TreeSet = new TreeSet<>(); //2. 添加元素到TreeSet TreeSet.add("A"); TreeSet.add("B"); TreeSet.add("C"); TreeSet.add("D"); TreeSet.add("E"); System.out.println(TreeSet); //3. 检查TreeSet中是否包含某个元素 boolean found = TreeSet.contains("A"); //true System.out.println(found); //4. 从TreeSet中删除元素 TreeSet.remove("D"); //5. 迭代TreeSet 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
Java 将 TreeSet 转换为数组示例
使用 toArrray() 方法将 TreeSet 转换为数组的 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 将 TreeSet 转换为 ArrayList 示例
使用 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]
日期:2020-09-17 00:09:49 来源:oir作者:oir