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

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