TreeSet<E>
TreeSet<E>
是 Java 集合框架中的一个重要类,它位于 java.util
包下,实现了 NavigableSet<E>
接口,而 NavigableSet<E>
又继承自 SortedSet<E>
接口。下面从多个方面为你详细介绍 TreeSet<E>
。
特性
- 元素唯一:和
Set
接口的其他实现类一样,TreeSet
不允许存储重复元素。当尝试添加重复元素时,TreeSet
会忽略该操作。 - 元素有序:
TreeSet
会根据元素的自然顺序或者创建TreeSet
时指定的比较器(Comparator
)对元素进行排序。若元素实现了Comparable
接口,TreeSet
会使用元素的自然顺序;若在创建TreeSet
时传入了Comparator
对象,则使用该比较器定义的顺序。 - 基于红黑树实现:红黑树是一种自平衡的二叉搜索树,这使得
TreeSet
在插入、删除和查找操作上的时间复杂度为。
构造方法
TreeSet()
:创建一个新的空TreeSet
,使用元素的自然顺序进行排序。元素必须实现Comparable
接口。
import java.util.TreeSet; public class TreeSetExample { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(3); numbers.add(1); numbers.add(2); System.out.println(numbers); } }
TreeSet(Comparator<? super E> comparator)
:创建一个新的空TreeSet
,使用指定的比较器进行排序。
import java.util.Comparator; import java.util.TreeSet; class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public int getAge() { return age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } } public class TreeSetWithComparator { public static void main(String[] args) { Comparator<Person> ageComparator = Comparator.comparingInt(Person::getAge); TreeSet<Person> people = new TreeSet<>(ageComparator); people.add(new Person("Alice", 25)); people.add(new Person("Bob", 20)); people.add(new Person("Charlie", 30)); System.out.println(people); } }
TreeSet(Collection<? extends E> c)
:创建一个包含指定集合中所有元素的TreeSet
,使用元素的自然顺序进行排序。
import java.util.ArrayList; import java.util.TreeSet; public class TreeSetFromCollection { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(3); list.add(1); list.add(2); TreeSet<Integer> numbers = new TreeSet<>(list); System.out.println(numbers); } }
常用方法
add(E e)
:将指定元素添加到集合中,如果集合中已经存在该元素,则不添加。添加成功返回true
,否则返回false
。
TreeSet<String> set = new TreeSet<>(); boolean result = set.add("apple");
remove(Object o)
:从集合中移除指定元素,如果元素存在则移除并返回true
,否则返回false
。
boolean removed = set.remove("apple");
contains(Object o)
:判断集合中是否包含指定元素,包含返回true
,否则返回false
。
boolean contains = set.contains("apple");
first()
:返回集合中的第一个(最小的)元素。
String firstElement = set.first();
last()
:返回集合中的最后一个(最大的)元素。
String lastElement = set.last();
size()
:返回集合中的元素数量。
int size = set.size();
iterator()
:返回一个用于遍历集合的迭代器,元素按升序排列。
import java.util.Iterator; import java.util.TreeSet; TreeSet<String> set = new TreeSet<>(); set.add("apple"); set.add("banana"); Iterator<String> iterator = set.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
注意事项
- 元素必须可比较:如果使用无参构造函数创建
TreeSet
,元素必须实现Comparable
接口;如果使用带比较器的构造函数,则无需元素实现Comparable
接口。 - 线程不安全:
TreeSet
不是线程安全的,如果需要在多线程环境下使用,可以考虑使用Collections.synchronizedSortedSet
方法将其包装成线程安全的集合。
import java.util.Collections; import java.util.TreeSet; import java.util.SortedSet; SortedSet<Integer> synchronizedSet = Collections.synchronizedSortedSet(new TreeSet<>());
综上所述,TreeSet
是一个非常实用的集合类,适合需要对元素进行排序和去重的场景。
Java集合框架 文章被收录于专栏
Java集合框架是Java提供的一组用于存储和操作数据的类和接口,它位于java.util包中,为开发者提供了强大且灵活的数据存储和处理能力。以下将从整体架构、主要接口、常用实现类、使用场景以及示例代码等方面详细介绍Java集合框架。