在Java中,Set
是 Collection
接口的一个子接口,表示一个不允许重复元素的集合。Set
不保证元素的顺序,并且有几个常用的实现类。
1. 主要方法
add(E e)
:将指定的元素e
添加到集合中。如果集合中已存在该元素,则添加操作失败。remove(Object o)
:从集合中移除指定的元素o
。contains(Object o)
:检查集合是否包含指定的元素o
。size()
:返回集合中的元素数量。isEmpty()
:检查集合是否为空。clear()
:移除集合中的所有元素。iterator()
:返回集合的迭代器,用于遍历集合。
2. 常见实现类
-
HashSet
:基于哈希表实现,元素没有顺序,性能较高,适合需要快速查找的场景。- 特点:不保证顺序,提供常数时间的操作性能(添加、删除、查找)。
- 线程安全:
HashSet
不是线程安全的,若需线程安全的Set
,可以使用Collections.synchronizedSet
。
-
LinkedHashSet
:基于哈希表和链表实现,保持元素插入的顺序。- 特点:保持插入顺序,性能介于
HashSet
和TreeSet
之间。 - 线程安全:同样不是线程安全的。
- 特点:保持插入顺序,性能介于
-
TreeSet
:基于红黑树实现,元素按自然顺序或构造时指定的比较器顺序排列。- 特点:元素有序,提供对元素的排序,性能较好。
- 线程安全:同样不是线程安全的。
3.遍历set
使用迭代器
Iterator<E> iterator = set.iterator();
while (iterator.hasNext()) {
E element = iterator.next();
// 处理元素
}
增强的for循环
for (E element : set) {
// 处理元素
}
4.实用工具
Collections
类:提供了一些静态方法来操作 Set
,如 synchronizedSet
、unmodifiableSet
等。
Set<String> synchronizedSet = Collections.synchronizedSet(set);
Set<String> unmodifiableSet = Collections.unmodifiableSet(set);