Java TreeSet
在Java集合框架中,TreeSet是一个非常实用的集合类,它是SortedSet接口的一个实现,基于TreeMap实现 。TreeSet提供了一个有序、不包含重复元素的集合,非常适合需要对元素进行排序的场景。
TreeSet简介
TreeSet是NavigableSet接口的实现类,它具有以下主要特点:
- 元素有序性:元素按照自然顺序或者自定义比较器排序
- 不允许重复:不包含重复元素
- 非线程安全:多线程环境下需要额外同步
- 基于红黑树:内部使用红黑树(Red-Black tree)数据结构实现
TreeSet的创建与基本操作
创建TreeSet
TreeSet提供了多种构造方法用于创建实例:
// 创建一个空的TreeSet,元素按照自然顺序排序
TreeSet<String> treeSet1 = new TreeSet<>();
// 创建一个包含指定集合所有元素的TreeSet
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
TreeSet<String> treeSet2 = new TreeSet<>(set);
// 创建一个空的TreeSet,并指定比较器
TreeSet<String> treeSet3 = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s2.compareTo(s1); // 降序排列
}
});
// 使用Lambda表达式简化比较器定义
TreeSet<String> treeSet4 = new TreeSet<>((s1, s2) -> s2.compareTo(s1));
基本操作
TreeSet支持常见的集合操作:
TreeSet<String> fruits = new TreeSet<>();
// 添加元素
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Apple"); // 重复元素,不会被添加
// 输出集合
System.out.println(fruits); // [Apple, Banana, Orange]
// 检查元素是否存在
boolean containsApple = fruits.contains("Apple"); // true
boolean containsGrape = fruits.contains("Grape"); // false
// 删除元素
fruits.remove("Banana");
System.out.println(fruits); // [Apple, Orange]
// 获取元素个数
int size = fruits.size(); // 2
// 清空集合
fruits.clear();
System.out.println(fruits.isEmpty()); // true
TreeSet的排序
TreeSet中的元素排序有两种方式:
- 自然排序:元素实现Comparable接口
- 自定义排序:提供Comparator比较器