码迷,mamicode.com
首页 > 其他好文 > 详细

集合之HashSet(含JDK1.8源码分析)

时间:2019-03-01 12:30:23      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:src   ash   value   3.3   一个   3.2   map   键值   public   

一、前言

  我们已经分析了List接口下的ArrayList和LinkedList,以及Map接口下的HashMap、LinkedHashMap、TreeMap,接下来看的是Set接口下HashSet和LinkedHashSet,其实在分析完了HashMap、LinkedHashMap之后,再来看HashSet和LinkedHashSet就会非常简单。

二、hashSet的数据结构

  因为hashSet的底层是基于hashMap或linkedHashMap的(new hashSet的时候可以指定),所以hashSet的数据结构就是hashMap或linkedHashMap的数据结构,因为前面已经分析过了hashMap和linkedHashMap的数据结构,这里不再赘述。集合之HashMap(含JDK1.8源码分析)集合之LinkedHashMap(含JDK1.8源码分析)

三、hashSet源码分析-属性及构造函数

  3.1 类的继承关系

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

  说明:实现了Set接口,其内定义了一些共有的操作。

  3.2 类的属性

    //版本序列号       
    static final long serialVersionUID = -5024744406713321676L;
    
    //基于map的操作
    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或linkedHashMap的,所以定义了一个HashMap的属性,又因为map是基于键值对来进行操作的,所以又定义了一个假的key-value中的value:PRESENT,注意此属性被final修饰,即值永远不会被改变,仅仅是在map操作时补一下value的位置。所有通过hashSet添加进来的key都对应同一个value值,PRESENT。

  3.3 类的构造函数

  技术图片

  如上所述,共有五种。这里说明一下hashSet基于两种不同的map操作的构造函数。

 

集合之HashSet(含JDK1.8源码分析)

标签:src   ash   value   3.3   一个   3.2   map   键值   public   

原文地址:https://www.cnblogs.com/zfyang2429/p/10455569.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!