Java TreeSet
Java TreeSet
TreeSet 是一个按排序顺序存储唯一元素的集合。
它是
提示:与无序的HashSet不同,TreeSet会自动保持其元素的排序。
Create a TreeSet
示例
创建一个名为 cars 的 TreeSet 对象,用于存储字符串:
import java.util.TreeSet; // 导入 TreeSet 类
TreeSet<String> cars = new TreeSet<>();
现在您可以使用诸如add()、contains()和remove()之类的方法来管理已排序的元素集合。
添加元素
要向TreeSet添加元素,请使用add()方法:
示例
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
TreeSet<String> cars = new TreeSet<>();
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("BMW"); // Duplicate
cars.add("Mazda");
System.out.println(cars);
}
}
输出:元素将自动排序(例如,[BMW, Ford, Mazda, Volvo])。
注意:重复项(例如"BMW")只会显示一次。
检查元素是否存在
使用 contains() 检查元素是否存在:
移除元素
使用 remove() 移除元素:
移除所有元素
使用 clear() 移除所有元素:
TreeSet 树集大小
使用 size() 来计算集合中唯一元素的数量:
注意:重复值不计入大小,只有唯一元素才计入。
遍历 TreeSet
使用 for-each 循环遍历 TreeSet 的元素:
示例
TreeSet<String> cars = new TreeSet<>();
// add elements...
for (String i : cars) {
System.out.println(i);
}
使用 TreeSet 处理数字
TreeSet 也适用于数字,并按从小到大的顺序对它们进行排序:
示例
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(40);
numbers.add(10);
numbers.add(30);
numbers.add(20);
for (int n : numbers) {
System.out.println(n);
}
}
}
输出:数字将按排序顺序打印(10、20、30、40)。
HashSet vs TreeSet(哈希集 vs 树集)
| 特性 | HashSet |
TreeSet |
|---|---|---|
| 顺序 | 无顺序保证 | 已排序(自然顺序) |
| 重复项 | 不允许重复项 | 不允许重复项 |
| 性能 | 更快(无需排序) | 更慢(由于排序) |
提示: 如果您注重速度,请使用HashSet;如果您需要排序后的元素,请使用TreeSet。
var 关键字
从 Java 10 开始,您可以使用 var 关键字声明一个 TreeSet 变量,而无需重复写类型。编译器会根据您赋值的值推断出变量类型。
这样可以缩短代码,但许多开发者为了清晰起见仍然使用完整的类型。由于var是有效的Java类型,您可能会在其他代码中看到它,因此了解它的存在很有帮助。
示例
// Without var
TreeSet<String> cars = new TreeSet<String>();
// With var
var cars = new TreeSet<String>();
Set 接口
注意: 有时您会在 Java 代码中同时看到 Set 和 TreeSet,例如:
import java.util.Set;
import java.util.TreeSet;
Set<String> cars = new TreeSet<>();
这意味着变量 (cars) 被声明为 Set(接口),但它存储的是一个 TreeSet 对象(实际的集合)。由于 TreeSet 实现了 Set 接口,因此这是可行的。
虽然工作方式相同,但有些开发者更喜欢这种方式,因为它让他们以后可以更灵活地更改类型。

