Set集合

无序、不重复的元素集合

核心要点

  1. 唯一性: 集合中不允许存在逻辑相等的元素(equals和hashCode比较);
  2. 无序性: 元素的存储不保证与存储顺序一致(部分实现类除外,如:LinkedSet、TreeSet)。

常用实现类

HashSet

特点:

  1. 底层实现:数据+链表;
  2. 无序存储;
  3. 允许null值。

LinkedHashSet

特点:

  1. 底层实现:双向链表;
  2. 有序存储;
  3. 允许null值。

TreeSet

特点:

  1. 底层实现:红黑树(自平衡二叉树);
  2. 元素有序;
  3. 不允许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);  
}