一、Set集合概述
Set集合由Set方法和Set实现类组成。Set集合中的元素不按特定的方式排序,只是简单的被存放在集合中。Set集合中的元素不能重复。
1、Set接口父接口和子接口
(1)父接口
Set的父接口有两个,分别是:
-
Collection接口:集合基础接口
-
Iterator接口:是一种用于访问集合的方法
(2)子接口
- NavigableSet:NavigableSet扩展了 SortedSet,具有了为给定搜索目标报告最接近匹配项的导航方法。
- SortedSet:继承于Set保存有序的集合。存储一组唯一,有序的对象。
2、Set接口中的方法
Set是collection的子接口,Set接口没有引入新的方法,即它所有的方法都是继承了父类collection中的方法。
方法 | 修饰符和类型 | 功能描述 |
---|---|---|
add(E e) | boolean | 将指定对象添加到当前集合内,确保集合对象中有e。 |
addAll(Collection<? extends E> c) | boolean | 将指定区间的对象添加到当前集合内。 |
claer() | void | 删除集合中所有元素。 |
contains(Object o) | boolean | 判断集合中是否包含指定元素。 |
containsAll(CCollection<? > c) | boolean | 判断集合中是否包含指定集合中的所有元素。 |
equals(Object o) | boolean | 判断集合与指定对象是否相等。 |
hashCode() | int | 返回当前集合的哈希编码。 |
isEmpty() | boolean | 返回boolean值,用于判断当前集合是否为空。 |
iterator() | Iterator<E> | 返回用于遍历集合内元素的迭代器。 |
parallelStream() | default Stream<E> | 以当前集合对象为数据源创建并行执行的流视图进行中间操作,有分而治之的思想,可以提高多线程任务的执行速度。 |
remove(Object o) | boolean | 将制定对象从当前集合中移除。 |
removeAll(Collection<? > c) | boolean | 将制定集合中的全部对象从当前集合中移除。 |
removeIf(Predicate<? super E> filter) | default boolean | 满足指定判断条件的所有对象从当前集合中移除。 |
retainAll(Collection<?> c) | boolean | 仅保留和指定集合相同的元素,即删除与指定集合不相同的元素。 |
size() | int | 返回int型值,获取当前集合中元素的个数。 |
spliterator() | default Spliterator<E> | 在当前集合元素基础上创建分割器。参考Spliterator接口的spliterator()方法。 |
stream() | default Stream<E> | 以当前集合对象为数据源创建视图进行中间操作,中间操作不改变数据源。 |
toArray() | Object[] | 将集合转换为数组,数组包含集合中所有元素,且元素顺序一致。 |
toArray(T[ ] a) | <T> T[ ] | 将集合转换为指定类型的数组。如果无法实现强制转换,就抛出ArrayStoreException。 |
由于Set集合中的元素不能重复,因此在向Set集合中添加元素的时候,需要先判断新增元素是否已经存在于集合中,再确定是否执行添加操作。例如,向使用HashSet实现类创建的Set集合中添加元素,执行过程如下图所示:
3、Set的实现类
实现类 | 描述 |
---|---|
AbstractSet | 继承于AbstractCollection并实现了大部分Set接口。 |
TreeSet | 继承AbstractSet,基于TreeMap的NavigableSet实现。 元素使用其自然顺序或在集合创建时提供的「Comparator」进行排序,具体取决于所使用的构造函数。此实现为基本操作(添加,删除和包含)提供了保证的log(n)时间成本。 |
LinkedHashSet | LinkedHashSet是Set集合的一个实现,具有set集合不重复的特点,同时具有可预测的迭代顺序,也就是我们插入的顺序。并且linkedHashSet是一个非线程安全的集合。如果有多个线程同时访问当前linkedhashset集合容器,并且有一个线程对当前容器中的元素做了修改,那么必须要在外部实现同步保证数据的冥等性。 |
JobStateReasons | JobStateReasons 类是打印属性类,它是一个枚举值集合,提供了有关作业当前状态的额外信息,即扩充作业的 JobState属性值的信息。 |
HashSet | 实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但是最多只能有一个null元素。 |
EnumSet | EnumSet 是一个专为枚举设计的集合类,EnumSet中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐式地指定。集合元素时有序的,内部以位向量的形式存储,不允许null元素。 |
CopyOnWriteArraySet | 它是线程安全的无序的集合,可以将它理解成线程安全的HashSet。有意思的是,CopyOnWriteArraySet和HashSet虽然都继承于共同的父类AbstractSet;但是,HashSet是通过 |