Set--集合
Set最大的特点就是不能存储相同的元素。Set直接继承Collection,因此具有Collection的一些常见的方法:
返回类型 | 方法(参数) |
---|---|
boolean | add(E e) 如果指定的元素不存在,则将其指定的元素添加(可选操作)。 |
boolean | addAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此集合(如果尚未存在)(可选操作)。 |
void | clear() 从此集合中删除所有元素(可选操作)。 |
boolean | contains(Object o) 如果此集合包含指定的元素,则返回 true 。 |
boolean | containsAll(Collection<?> c) 返回 true如果此集合包含所有指定集合的元素。 |
boolean | equals(Object o) 将指定的对象与此集合进行比较以实现相等。 |
int | hashCode() 返回此集合的哈希码值。 |
boolean | isEmpty() 如果此集合不包含元素,则返回 true 。 |
Iterator<E> | iterator() 返回此集合中元素的迭代器。 |
boolean | remove(Object o) 如果存在,则从该集合中删除指定的元素(可选操作)。 |
boolean | removeAll(Collection<?> c) 从此集合中删除指定集合中包含的所有元素(可选操作)。 |
boolean | retainAll(Collection<?> c) 仅保留该集合中包含在指定集合中的元素(可选操作)。 |
int | size() 返回此集合中的元素数(其基数)。 |
default Spliterator<E> | spliterator() 在此集合中的元素上创建一个 |
Object[] | toArray() 返回一个包含此集合中所有元素的数组。 |
<T> T[] | toArray(T[] a) 返回一个包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。 |
Set中的常用实现类
首先我们来看下Set的结构图
可以看出主要的有三个实现类:
- HashSet
- TreeSet
- LinkedHashSet
我们依次来了解这三个实现类
HashSet
HashSet是无序的,不可重复的,允许存放null值,底层封装HashMap,它是不同步的,是线程不安全的。相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成,我们应该为保存到 HashSet 中的对象覆盖 hashCode() 和 equals()。
TreeSet
TreeSet是一个有序的集合,它的作用是提供有序的Set集合。它继承了AbstractSet抽象类,实现了NavigableSet<E>,Cloneable,Serializable接口。TreeSet是基于TreeMap实现的,TreeSet的元素支持2种排序方式:自然排序或者根据提供的Comparator(比较器)进行排序。
LinkedHashSet
LinkedHashSet继承自HashSet,几乎与HashSet相同。LinkedHashSet同样具有不可重复的特点,但是其迭代顺序是有序的,即其迭代顺序为数据插入时的顺序。LinkedHashSet是一个线程不安全的集合。