关闭

JAVA集合源码分析系列:HashSet源码分析

325人阅读 评论(0) 收藏 举报
分类:

HashSet

分析

HashSet是一个没有重复元素的集合。
它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。

HashSet的父类和实现的接口

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable

构造函数

    public HashSet() {
        map = new HashMap<>();
    }

从构造方法可以很轻松的看出,HashSet的底层是一个HashMap,理解了HashMap后,这里没什么可说的。

属性

    static final long serialVersionUID = -5024744406713321676L;

    private transient HashMap<E,Object> map;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

看到这里就明白了,和我们前面说的一样,HashSet是用HashMap来保存数据,而主要使用到的就是HashMap的key。

行为

add方法分析

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

利用HashMap的put方法实现add方法

remove方法分析

    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }

利用HashMap的remove方法实现remove方法

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

深入源码分析HashSet

前面我们花了一定的篇幅学习了HashMap的一些底层原理,以及简单了解了HashSet和HashMap两种集合的渊源,现在我们从HashSet源码入手,来学习HashSet更细节的地方
  • canot
  • canot
  • 2016-04-25 10:09
  • 1770

HashSet源码分析(基于JDK8)

对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashM...
  • fighterandknight
  • fighterandknight
  • 2017-03-27 00:16
  • 1181

Java集合---HashSet的源码分析

Java集合---HashSet的源码分析 一、  HashSet概述:    HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set...
  • weixin_35663229
  • weixin_35663229
  • 2016-10-12 17:17
  • 103

Java集合---HashSet的源码分析

一、  HashSet概述:    HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。...
  • yangxi_001
  • yangxi_001
  • 2017-06-02 16:50
  • 106

Java集合框架之List---ArrayList与LinkedList源码分析

一、 ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。   ArrayList不是线程安全的,只能用在单线程...
  • oChangWen
  • oChangWen
  • 2016-01-26 13:51
  • 3177

java并发-ReentrantLock源码分析

1关于可重入锁        ReentrantLock是基于AQS实现的可重入的同步工具类,它提供了两种同步器的实现即公平锁FairSync和非公平锁NonfairSync。它提供了一种无条件的、可...
  • wojiushiwo945you
  • wojiushiwo945you
  • 2014-12-26 14:28
  • 1176

Java集合---HashSet的源码分析

Java集合---HashSet的源码分析 本文转自:http://www.cnblogs.com/ITtangtang/p/3948538.html 一、  HashSet概述:    Ha...
  • u011032983
  • u011032983
  • 2016-08-22 00:33
  • 152

Java集合---HashSet的源码分析

一、  HashSet概述:    HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。...
  • wangjun_818
  • wangjun_818
  • 2017-07-14 09:25
  • 149

Java集合系列之HashSet源码分析

一、HashSet简介   HashSet是Set接口典型实现,它按照Hash算法来存储集合中的元素,具有很好的存取和查找性能。主要具有以下特点: 不保证set的迭代顺序HashSet不是...
  • xujian_2014
  • xujian_2014
  • 2015-07-13 20:26
  • 626

【源码】Set集合源码剖析

注:以下源码基于jdk1.7.0_11 Set集合其实是对Map集合的封装,Map集合存储的是键值对,那么我们将值隐藏,不向外界暴露,这样就形成了Set集合。 对应Map集合的两个...
  • RowandJJ
  • RowandJJ
  • 2014-08-23 22:58
  • 1554
    写给自己
    ○ 种一棵树最好的时间是十年前,其次是现在

    ○ 坚持输出,坚持书写,才可以持续成长

    ○ 所有美好事物的成长都是缓慢的

    ○ 既往不恋,未来不迎,当下不杂

    ○ 业精于勤,荒于嬉,行成于思,毁于随

    ○将军赶路 不追小兔

    ○不要拘泥于语言,同样也不要拘泥于行业,眼光放远一点

    ○ 如果某件事你做的不够好,不必介怀,因为以后的每一次每一天你都会做得越来越好

    ○ 此心不于事上磨,更于何处磨此心

    ○ 保持热情,保持求知欲

    ○ 千里之行,始于足下

    ○ 最怕你一生碌碌无为,还安慰自己平凡可贵。

    ○ 对于任何事,要保持自觉积极主动探索尝试。但是如果自己不积极认真地生活,不管得到什么样的回答都没有用。——解忧杂货店
    个人资料
    • 访问:673472次
    • 积分:6930
    • 等级:
    • 排名:第3883名
    • 原创:293篇
    • 转载:52篇
    • 译文:0篇
    • 评论:119条
    个人简介