Set集合
无序、不重复的元素集合
核心要点
- 唯一性: 集合中不允许存在逻辑相等的元素(equals和hashCode比较);
- 无序性: 元素的存储不保证与存储顺序一致(部分实现类除外,如:LinkedSet、TreeSet)。
常用实现类
HashSet
特点:
- 底层实现:数据+链表;
- 无序存储;
- 允许null值。
LinkedHashSet
特点:
- 底层实现:双向链表;
- 有序存储;
- 允许null值。
TreeSet
特点:
- 底层实现:红黑树(自平衡二叉树);
- 元素有序;
- 不允许null值。
通用方法
| 方法 | 描述 |
|---|---|
boolean add(E e) | 添加元素,若元素已存在则返回 false |
boolean remove(Object o) | 删除元素,成功返回 true |
boolean contains(Object o) | 判断元素是否存在 |
int size() | 返回元素个数 |
boolean isEmpty() | 判断集合是否为空 |
void clear() | 清空集合 |
Iterator<E> iterator() | 获取迭代器,用于遍历 |
boolean addAll(Collection<? extends E> c) | 批量添加元素 |
代码示例
public static void main(String[] args) {
Set<String> hashSet = new HashSet<>();
hashSet.add(null);
hashSet.add("1");
hashSet.add("2");
hashSet.add("2");
hashSet.add("3");
hashSet.add("4");
hashSet.add("5");
hashSet.add("6");
hashSet.add("a");
hashSet.add("7");
hashSet.add("8");
hashSet.add("b");
hashSet.add("9");
System.out.println(hashSet);
System.out.println();
Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add(null);
linkedHashSet.add("1");
linkedHashSet.add("2");
linkedHashSet.add("2");
linkedHashSet.add("b");
linkedHashSet.add("3");
System.out.println(linkedHashSet);
System.out.println();
Set<String> treeSet = new TreeSet<>();
treeSet.add("1");
//treeSet.add(null);//运行时异常,空指针错误
treeSet.add("2");
treeSet.add("2");
treeSet.add("3");
treeSet.add("a");
System.out.println(treeSet);
}