JDK源码(二十四):HashSet

Posted jdkSpring

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK源码(二十四):HashSet相关的知识,希望对你有一定的参考价值。

java.util.HashSet实现了Set接口,由一个哈希表(实际上是一个HashMap实例)支持。它不保证集合的迭代顺序;特别是,它不保证顺序随时间保持不变。这个类允许null元素。HashSet实现Set接口,而Set接口继承
Collection,而HashMap实现Map接口,不继承Collection
HashSet 集合不允许存储相同的元素, 它底层实际上使用 HashMap 来存储元素的, 不过关注的只是key元素, 所有 value元素默认为 Object类对象。

类名

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

变量

private transient HashMap<E,Object> map;// 与备份映射中的对象关联的虚拟值private static final Object PRESENT = new Object();

从变量中我们可以看出,HashSet的实现其实就是HashMap,HashMap存储的是key-value,而HashSet是将值存在key上,value保存默认值Object。

add

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

从add方法上我们也可以看出HashSet是把值存储到key上。

实例

源码(JDK1.8)

以上是关于JDK源码(二十四):HashSet的主要内容,如果未能解决你的问题,请参考以下文章

二十四.SpringCloudConfig源码-配置拉取流程

jquery源码学习笔记(二十四)

合集DUBBO源码解析及最佳实践合集二十四篇

android源码解析(二十四)-->onSaveInstanceState执行时机

netty入门(二十四)Netty心跳机制源码剖析

JDK源码阅读:最简单的HashSet源码分析