摘要:内部是利用实现的,将值存在的上这也是为什么不允许存取重复值得原因。数据结构与支持映射中的对象关联的虚拟值中的,只是一个无意义的空对象默认的构造函数查询内容的时候实际是在中查询增加的时候,在的位置放置要存的值,在中放置一个没有意义的空对象
hashSet内部是利用hashMap实现的,将值存在hashmap的key上这也是为什么hashset不允许存取重复值得原因。
数据结构
private transient HashMapmap; // 与支持映射中的对象关联的虚拟值 ,map中的value,只是一个无意义的空对象 private static final Object PRESENT = new Object();
默认的构造函数
public HashSet() { map = new HashMap<>(); }
查询内容的时候实际是在map中查询key
public boolean contains(Object o) { return map.containsKey(o); }
增加的时候,在key的位置放置要存的值,在value中放置一个没有意义的空对象
public boolean add(E e) { return map.put(e, PRESENT)==null; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72855.html
摘要:简介继续分析源码,上一篇文章把的分析完毕。本文开始分析简单的介绍一下。存储的元素是无序的并且允许使用空的元素。 1.简介 继续分析源码,上一篇文章把HashMap的分析完毕。本文开始分析HashSet简单的介绍一下。 HashSet是一个无重复元素集合,内部使用HashMap实现,所以HashMap的特征耶继承了下来。存储的元素是无序的并且HashSet允许使用空的元素。 HashSe...
摘要:到此发现,实际上可以拆分成跟指的是,则是指实现了接口,这样看来,的实现其实就比较简单了,下面开始分析源码。 概述 在分析HashSet源码前,先看看HashSet的继承关系 showImg(https://segmentfault.com/img/bVWo4W?w=605&h=425); HashSet继承关系从上图可以看出,HashSet继承自AbstractSet,实现了Set接口...
摘要:源码分析属性内部使用虚拟对象,用来作为放到中构造方法非,主要是给使用的构造方法都是调用对应的构造方法。遍历元素直接调用的的迭代器。什么是机制是集合中的一种错误机制。当使用迭代器迭代时,如果发现集合有修改,则快速失败做出响应,抛出异常。 简介 集合,这个概念有点模糊。 广义上来讲,java中的集合是指java.util包下面的容器类,包括和Collection及Map相关的所有类。 中...
摘要:就有这个功能,它是怎么实现有序的呢源码分析继承自,让我们直接上源码来看看它们有什么不同。是有序的,它是按照插入的顺序排序的。所以,是不支持按访问顺序对元素排序的,只能按插入顺序排序。 介绍 上一节我们说HashSet中的元素是无序的,那么有没有什么办法保证Set中的元素是有序的呢? 答案是当然可以。 LinkedHashSet就有这个功能,它是怎么实现有序的呢? 源码分析 Linked...
摘要:下面总结一下集合常用的三个子类吧无序,允许为,底层是散列表红黑树,非线程同步有序,不允许为,底层是红黑树非线程同步迭代有序,允许为,底层是双向链表,非线程同步从结论而言我们就可以根据自己的实际情况来使用了。 前言 声明,本文用的是jdk1.8 前面章节回顾: Collection总览 List集合就这么简单【源码剖析】 Map集合、散列表、红黑树介绍 HashMap就是这么简单【源码...
阅读 3848·2021-09-10 11:22
阅读 2307·2021-09-03 10:30
阅读 3627·2019-08-30 15:55
阅读 1823·2019-08-30 15:44
阅读 826·2019-08-30 15:44
阅读 547·2019-08-30 14:04
阅读 3028·2019-08-29 17:18
阅读 1249·2019-08-29 15:04