jdk源码浅读-HashSet

作者: Java黎先生 | 来源:发表于2018-11-09 17:33 被阅读7次

通过阅读源码发现,HashSet底层的实现源码其实就是调用HashMap的方法实现的,所以如果你阅读过HashMap或对HashMap比较熟悉的话,那么阅读HashSet就很轻松,也很容易理解了。我之前也写了一篇关于hashMap源码阅读的文章,可以点击这里查看。

使用过HashSet的都清楚它保存的元素是不可以重复的,其实HashSet的元素都是保存在HashMap的key中的,而HashMap的key是没有重复的。

构造函数

/**

* Constructs a new, empty set; the backing HashMap instance has

* the specified initial capacity and the specified load factor.

*

* @param initialCapacity the initial capacity of the hash map

* @param loadFactor the load factor of the hash map

* @throws IllegalArgumentException if the initial capacity is less

* than zero, or if the load factor is nonpositive

*/

public HashSet(int initialCapacity, float loadFactor) {

map = new HashMap<>(initialCapacity, loadFactor);

}

HashSet的构造方法都是直接调用了HashMap的构造方法,HashSet有很多个构造方法全部都是直接调用了HashMap的构造方法。

add方法

/**

* Adds the specified element to this set if it is not already present.

* More formally, adds the specified element e to this set if

* this set contains no element e2 such that

* (e==null ? e2==null : e.equals(e2)).

* If this set already contains the element, the call leaves the set

* unchanged and returns false.

*

* @param e element to be added to this set

* @return true if this set did not already contain the specified

* element

*/

public boolean add(E e) {

return map.put(e, PRESENT)==null;

}

contains方法

/**

* Returns true if this set contains the specified element.

* More formally, returns true if and only if this set

* contains an element e such that

* (o==null ? e==null : o.equals(e)).

*

* @param o element whose presence in this set is to be tested

* @return true if this set contains the specified element

*/

public boolean contains(Object o) {

return map.containsKey(o);

}

remove方法

/**

* Removes the specified element from this set if it is present.

* More formally, removes an element e such that

* (o==null ? e==null : o.equals(e)),

* if this set contains such an element. Returns true if

* this set contained the element (or equivalently, if this set

* changed as a result of the call). (This set will not contain the

* element once the call returns.)

*

* @param o object to be removed from this set, if present

* @return true if the set contained the specified element

*/

public boolean remove(Object o) {

return map.remove(o)==PRESENT;

}

其他的方法也都是直接调用HashMap的方法,所以在这里就不用贴出来了。

1、只要弄懂HashMap就很容易明白HashSet了,可以参考这篇文章:jdk源码浅读-HashMap https://www.cnblogs.com/rainple/p/9927263.html

2、我自己在看源码的时候也手写了HashMap、HashSet等数据结构的类,大家可以下载下来参考一下,有不懂或不理解的地方可以问我,如果有什么问题也随时欢迎骚扰。项目地址: https://github.com/rainple1860/MyCollection

这里给大家推荐一个学习路线

架构筑基专题

开源框架源码

高性能架构

微服务

团队协作开发

B2C商城

现在加群即可获取更加详细的Java架构脑图,还有Java工程化、高性能及分布式、高性能、高架构、zookeeper、性能调优、Spring、MyBatis、Netty源码分析和大数据等多个知识点高级进阶干货的直播免费学习权限及相关视频资料,群号:923116658

点击链接加入群聊【Java架构解析】:https://jq.qq.com/?_wv=1027&k=5e1QsXb

相关文章

  • jdk源码浅读-HashSet

    通过阅读源码发现,HashSet底层的实现源码其实就是调用HashMap的方法实现的,所以如果你阅读过HashMa...

  • JDK源码--HashSet

    一、概念 类定义: 继承了AbstractSet抽象类,实现了Set接口,拥有一组Set通用的操作。 实现了Clo...

  • HashSet源码分析:JDK源码系列

    1.简介 继续分析源码,上一篇文章把HashMap的分析完毕。本文开始分析HashSet简单的介绍一下。 Hash...

  • jdk源码分析之HashSet

    一.定义 HashSet继承与AbstractSet类,实现Set,Cloneable,Serializable接...

  • jdk源码分析(六)——HashSet

    一.类定义 可以看到,和HashMap类似,HashSet也是继承了一个抽象类,并实现了一个基础的接口Set。 S...

  • JDK源码 0923 HashSet HashTable

    进了HashXXX家族,感觉好难啊HashSet的底层实现竟然是HashMap,年少无知了。不过想想也是复用的典范...

  • JDK源码分析(4)HashSet

    JDK版本 HashSet简介 HashSet特点 非线程安全 允许null值 添加值得时候会先获取对象的hash...

  • 二、HashMap、HashSet和Hashtable

    所有集合基于jdk1.8,对源码稍做调整。 HashMap 主要变量 构造方法 put get HashSet H...

  • 10.HashSet

    HashSet的源码如此简单。下面还是对HashSet的源码作一个总结吧: HashSet基于HashMap实现,...

  • Java集合之HashSet源码分析

    阅读目录 一、HashSet简介 二、HashSet源码分析 三、HashSet的应用示例代码

网友评论

    本文标题:jdk源码浅读-HashSet

    本文链接:https://www.haomeiwen.com/subject/wbioxqtx.html