Java 中的 TreeSet 是一种基于红黑树算法实现的有序集合。它继承自 AbstractSet 类并且实现了 SortedSet 接口。TreeSet 提供了对元素进行排序和范围查询的功能,它不允许插入 null 值元素,元素必须实现 Comparable 接口或在创建 TreeSet 时提供一个自定义的比较器。
创建 TreeSet 对象
我们可以通过以下几种方式来创建 TreeSet 对象:
- 无参构造方法:创建一个空的 TreeSet 对象,元素的默认排序方式是按照升序排列。
java
TreeSet<String> set = new TreeSet<>();
- 使用自定义的 Comparator 接口实现类:创建一个按照自定义排序方式的 TreeSet 对象。
java
TreeSet<String> set = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
添加元素
向 TreeSet 中添加元素的方式和 HashSet 相同,只是 TreeSet 中的元素会按照排序规则进行自动排序。
set.add("Python");
set.add("Java");
set.add("Ruby");
示例一
TreeSet<Integer> set = new TreeSet<>();
set.add(1);
set.add(5);
set.add(3);
set.add(5);
System.out.println(set);
输出结果:
[1, 3, 5]
在这个例子中,我们创建了一个 TreeSet 对象,向其中添加了四个元素,其中重复的元素只会保留一个。输出结果可以看到,元素被自动进行了排序,最后的结果中是按照升序排列的。
示例二
TreeSet<String> set = new TreeSet<>(Collections.reverseOrder());
set.add("AA");
set.add("CC");
set.add("BB");
System.out.println(set);
输出结果:
[CC, BB, AA]
在这个例子中,我们创建了一个 TreeSet 对象,并且使用了 Collections.reverseOrder() 方法来创建一个自定义的降序排列的比较器对象。然后向 TreeSet 中添加了三个字符串元素,并且输出结果可以看到元素被根据我们指定的比较器进行了排序,最后的结果是降序排列的。