java set 如何使用
Java Set 的基本概念
Set 是 Java 集合框架中的一个接口,继承自 Collection 接口。Set 的特点是不允许重复元素,且不保证元素的顺序(具体实现类可能有不同的行为,如 LinkedHashSet 会维护插入顺序)。
Set 的常用实现类
-
HashSet
基于哈希表实现,提供快速的插入、删除和查找操作,但不保证元素的顺序。 -
LinkedHashSet
继承自HashSet,维护元素的插入顺序,适合需要顺序访问的场景。 -
TreeSet
基于红黑树实现,元素按自然顺序或自定义比较器排序,适合需要有序集合的场景。
Set 的基本操作
创建 Set 对象
Set<String> hashSet = new HashSet<>();
Set<String> linkedHashSet = new LinkedHashSet<>();
Set<String> treeSet = new TreeSet<>();
添加元素
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Orange");
检查元素是否存在
boolean containsApple = hashSet.contains("Apple"); // true
删除元素
hashSet.remove("Banana");
遍历元素
for (String fruit : hashSet) {
System.out.println(fruit);
}
获取 Set 大小
int size = hashSet.size();
Set 的高级操作
集合运算
-
并集

Set<String> set1 = new HashSet<>(Arrays.asList("A", "B")); Set<String> set2 = new HashSet<>(Arrays.asList("B", "C")); set1.addAll(set2); // set1 变为 {A, B, C} -
交集
set1.retainAll(set2); // set1 变为 {B} -
差集
set1.removeAll(set2); // set1 变为 {A}
转换为数组
String[] array = hashSet.toArray(new String[0]);
注意事项
-
元素唯一性
Set 不允许重复元素,添加重复元素时会被忽略。
-
null 值
HashSet和LinkedHashSet允许一个null值,但TreeSet不允许(会抛出NullPointerException)。 -
线程安全性
默认的 Set 实现不是线程安全的。如果需要线程安全,可以使用Collections.synchronizedSet包装:Set<String> synchronizedSet = Collections.synchronizedSet(new HashSet<>()); -
性能比较
HashSet:插入、删除、查找均为 O(1)。LinkedHashSet:插入、删除、查找接近 O(1),但维护顺序有额外开销。TreeSet:插入、删除、查找为 O(log n),但支持有序操作。
示例代码
import java.util.*;
public class SetExample {
public static void main(String[] args) {
Set<String> fruits = new HashSet<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Apple"); // 重复元素,不会被添加
System.out.println("Set contains Banana: " + fruits.contains("Banana"));
fruits.remove("Banana");
System.out.println("Fruits in set:");
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
输出:
Set contains Banana: true
Fruits in set:
Orange
Apple






