10_06【Java】Set集合详述

本文详细介绍了Java中的Set集合,包括Set接口的概述、接口方法、实现类,重点讲解了HashSet和TreeSet的区别和用法。HashSet是无序、唯一的对象集合,而TreeSet则会按自然顺序或指定比较器排序元素。
摘要由CSDN通过智能技术生成

一、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是通过
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值