前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java基础】Set集合系列

【Java基础】Set集合系列

作者头像
全栈开发日记
发布2022-05-12 19:58:55
3010
发布2022-05-12 19:58:55
举报
文章被收录于专栏:全栈开发日记

本篇目录

1- Set集合的特点 2- Set集合常用方法 3- HashSet 4- TreeSet 5- LinkedHashSet

Set 继承关系图

1 Set集合的特点

继承关系:从Set集合的继承图可以看到,它与List集合一样继承了Collection接口,说明Set集合也是一个单列集合。

与List区别:List的实现类都是有序的,而Set集合不一定有序。

存储元素特点:存储的元素不可重复,并且一般是允许存储NULL值的,除了TreeSet。

2 Set集合常用方法

向集合中添加一个元素,成功添加返回true,失败则返回false

代码语言:javascript
复制
set.add("测试数据")

从集合中删除一个元素,成功删除返回true,失败则返回false

代码语言:javascript
复制
set.remove("测试数据")

判断元素是否在Set集合中,存在返回true,不存在返回false

代码语言:javascript
复制
set.contains("测试数据")

返回Set集合存储元素的数量,返回一个数字,这个数字就是Set集合当前的大小

代码语言:javascript
复制
set.size()

以上就是Set集合的最基本的一些用法,如果有兴趣可以继续学习一下它的其他方法,如Set集合转数组、获取stream流等方法。

3 HashSet

HashSet是Set集合系列中最常用的,它的特点如下:无序元素不可重复可存储NULL值非线程安全

从HashSet的继承结构图中可以看到,SerializableCloneable接口依旧是标识性接口,分别标识可序列化和可克隆。继承的`AbstractSet`抽象类则是将Set集合的一些共性方法抽取,以避免重复代码。

HashSet底层数据结构

从HashSet的add方法源码中可以看到如下代码

代码语言:javascript
复制
// HashSet集合的add方法
public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}

在HashSet的构造方法中可以看到,这里的map其实就是HashMap,HashSet的add方法其实就是借助的HashMap的put方法来添加元素的,如果添加的元素不存在,则返回的是null,则add方法返回true,表示添加元素成功。

代码语言:javascript
复制
// HashSet集合的构造方法
public HashSet() {
    map = new HashMap<>();
}

如果还需要继续往下探究,就要再探究HashMap的底层了,有兴趣的可以查看这篇内容:HashMap深度解析

4 TreeMap

TreeSet集合特点如下:无序但会处于排序状态不允许添加NULL值元素不可重复

由TreeSet继承图可以看到,它还额外实现了NavigableSet接口,而NavigableSet接口又实现了SortedSet接口,所以这会使TreeMap集合元素处于排序的状态。

处于排序状态什么意思?如下代码中我依次向集合中添加的5、3、4、100、60五个数,最后遍历输出结果顺序为3、4、5、60、100。这也就证明了,TreeSet元素是会处于排序的状态。

测试用例:

代码语言:javascript
复制
Set<Integer> set = new TreeSet<>(); // 创建TreeSet对象
set.add(5); // 添加元素
set.add(3);
set.add(4);
set.add(100);
set.add(60);
// 遍历TreeSet元素并打印到控制台
for (Integer i : set) {
    System.out.println(i);
}

TreeSet底层数据结构

由于TreeSet底层实现是红黑树,所以默认整型排序为从小到大,这也就解释了为什么TreeSet元素会处于排序状态。红黑树的底层数据结构这使得TreeSet对元素的查找非常快捷。

TreeSet特有方法

返回集合的第一个元素,实现至SortedSet接口

代码语言:javascript
复制
set.first()

返回集合的最后一个元素,实现至SortedSet接口

代码语言:javascript
复制
set.last()

返回指定元素的前一个元素,实现至NavigableSet接口

代码语言:javascript
复制
set.lower("测试元素")

返回指定元素的后一个元素,实现至NavigableSet接口

代码语言:javascript
复制
set.higher("测试元素")

如上四个方法就是TreeSet集合常用的特有方法,这些方法HashSet是没有的。

5 LinkedHashSet

LinkedHashSet继承至HashSet,所以操作与HashSet基本无异,唯一的区别在于LinkedHashSet是有序的,原因是LinkedHashSet存储元素调用的是LinkedHashMap,使用了双向链表来维护元素先后次序。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档