java如何使用set
使用 Set 的基本方法
在 Java 中,Set 是一个不包含重复元素的集合接口,常见的实现类有 HashSet、LinkedHashSet 和 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");
删除元素
hashSet.remove("Banana");
遍历元素
for (String fruit : hashSet) {
System.out.println(fruit);
}
Set 的实现类比较
HashSet
- 基于哈希表实现,不保证元素的顺序。
- 插入、删除和查找操作的时间复杂度为 O(1)。
LinkedHashSet
- 基于哈希表和链表实现,维护元素的插入顺序。
- 插入、删除和查找操作的时间复杂度为 O(1)。
TreeSet

- 基于红黑树实现,元素按自然顺序或自定义比较器排序。
- 插入、删除和查找操作的时间复杂度为 O(log n)。
常用操作示例
初始化并添加元素
Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
获取 Set 的大小
int size = numbers.size();
清空 Set
numbers.clear();
判断 Set 是否为空
boolean isEmpty = numbers.isEmpty();
集合操作
并集

Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3));
Set<Integer> set2 = new HashSet<>(Arrays.asList(3, 4, 5));
set1.addAll(set2); // set1 现在包含 [1, 2, 3, 4, 5]
交集
set1.retainAll(set2); // set1 现在包含 [3]
差集
set1.removeAll(set2); // set1 现在包含 [1, 2]
自定义对象使用 Set
如果要在 Set 中存储自定义对象,必须重写 equals() 和 hashCode() 方法,以确保对象唯一性。
class Person {
private String name;
private int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
使用 TreeSet 排序
TreeSet 可以按自然顺序或自定义比较器排序。
自然排序
Set<String> treeSet = new TreeSet<>();
treeSet.add("Banana");
treeSet.add("Apple");
treeSet.add("Orange");
// 输出顺序为 Apple, Banana, Orange
自定义排序
Set<Person> people = new TreeSet<>(Comparator.comparingInt(Person::getAge));






