Java中的TreeSet是什么?

  • Post category:Java

Java 中的 TreeSet 是一种基于红黑树算法实现的有序集合。它继承自 AbstractSet 类并且实现了 SortedSet 接口。TreeSet 提供了对元素进行排序和范围查询的功能,它不允许插入 null 值元素,元素必须实现 Comparable 接口或在创建 TreeSet 时提供一个自定义的比较器。

创建 TreeSet 对象

我们可以通过以下几种方式来创建 TreeSet 对象:

  1. 无参构造方法:创建一个空的 TreeSet 对象,元素的默认排序方式是按照升序排列。

java
TreeSet<String> set = new TreeSet<>();

  1. 使用自定义的 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 中添加了三个字符串元素,并且输出结果可以看到元素被根据我们指定的比较器进行了排序,最后的结果是降序排列的。