java基础-Set集合(一)

123 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

🍊作者简介:少年不想说话,努力长大

🍊往期回顾:

🍊近期目标:写完基础源码,点赞👍🏼、收藏⭐、留言📩

set集合在我们日常的开发中最常听到的就是他可以去重啊,去重选它最好使;

那么它为什么可以实现这一个效果呢,下面和我走进源码;首先看下官方解释;

不包含重复元素的集合。更正式地说,集合不包含一对元素 e1 和 e2 使得 e1.equals(e2),并且最多包含一个空元素。注意:如果将可变对象用作集合元素,则必须非常小心。

Set继承了Collection类,所以我们称它为集合;

我们看看set里有什么接口方法🍍🍍🍍;

size方法

**首先第一个是size方法,**我们点开size发现它直接是取集合的值,为了方便观察,这里我们以HashSet为例看看hashSet是如何计算它的size的;

这里注意我们看HashSet的初始化,

无论你如何初始化,这里都是调用初始化HashMap;要说它的size那我们还绕不开它的put方法,毕竟只有put进去了,size的用处才能体现🍍🍍🍍;

在HashSet的add方法实际上是去调用HashMap的put方法,然后put会调用putVal方法;

在这里会对size进行++;这样在我们的set对象调用size方法的时候会直接返回HashMap里的size值;都不用走啥逻辑,所以获取集合大小只是个取数据的时间;

isEmpty方法

它的isEmpty方法我们可以去HashMap里的isEmpty方法里去看看,它的返回是

public boolean isEmpty() {  
  return size == 0;
}

写到这,基本可以得到一个结论,java没有Set类,要说有那也是对Map的封装,你之所以看到Set是因为对HashMap封装方便操作吧,我猜;如果说的有问题,还望指正

clear方法

从源码可以看到当我们调用clear方法会将size置0;然后通过将对应的数据用一个Node存储,然后以循环的方式将该对应的对象置为null;这个赋值给node对象我们可以看->

【为啥要特意将table数据给node节点对象然后删除呢,不大理解】不过看到hash了我也就放心了,反正置地址值为null反正是可以了;🥗🥗🥗 

结束结束,那就🛴🛴🛴

**如果对你有所帮助****duang点个赞呗
**