HashSet源码解读

无人机航拍图像匹配——SIFT算法实践(含代码) 阅读详情

概述

一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。

构造方法

构造方法摘要
HashSet()
          构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75。
HashSet(Collection<? extendsE> c)
          构造一个包含指定 collection 中的元素的新 set。
HashSet(int initialCapacity)
          构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和默认的加载因子(0.75)。
HashSet(int initialCapacity, float loadFactor)
          构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和指定的加载因子。

构造方法感觉跟hashMap是不是很像

看源码

看看hashSet源码,加上注释才312行代码-_-

属性源码

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();

    /**
     * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
     * default initial capacity (16) and load factor (0.75).
     */
    public HashSet() {
        map = new HashMap<>();
    }

通过源码可以发现HashSet所有的操作都是基本HashMap的,数据存储在map当中key中,PRESENT是map中value的样板数据

仔细看比hashMap多了一个私有的构造方法,通过注释发现它是提供给LinkedHashSet使用的

/**
     * Constructs a new, empty linked hash set.  (This package private
     * constructor is only used by LinkedHashSet.) The backing
     * HashMap instance is a LinkedHashMap with 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
     * @param      dummy             ignored (distinguishes this
     *             constructor from other int, float constructor.)
     * @throws     IllegalArgumentException if the initial capacity is less
     *             than zero, or if the load factor is nonpositive
     */
    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

相关文章:

HashMap源码解读
GEE:关于遥感生态指数(RSEI)的若干疑问 本文记录了若干关于在 Google Earth Engine (GEE)平台上,计算基于主成分分析(PCA)的遥感生态指数(RSEI)的问题。并记录了解决这些问题的一些答案。问题包括,主成分分析的特征值的正负,主成分的占比,去云后空值像素的处理方法,异常值处理方法,如何看载荷等。 阅读详情

相关推荐

华为S7700交换机Console密码重置全流程详解

本文详细解析了华为S7700交换机Console密码丢失后的重置全流程。通过进入BootROM菜单清除密码,并涵盖单/双主控场景操作、必备工具连接、常见问题排查及重置后的安全配置建议,帮助网络工程师掌握核心交换机的关键应急恢复技能,确保运维安全。

resnet7explorer的博客 539

java HashSet 源码分析(深度讲解)

java 集合篇章——HashSet源码解读。(非常详细)

优快云 / 稀土掘金/ B站 / GitHub: Cyan_RA9 3511

Python语言在工业控制中的简单应用

在工业控制中,经常需要对采集到的数据进行分析和处理,Python的这些库可以简化这一过程。传统的工业控制系统多依赖于专用的控制硬件和软件,但随着技术的发展,开放性和灵活性成为了新的需求焦点。还有,Python社区活跃,提供了大量的开源代码和模块,这对于工业控制领域来说是一个巨大的资产。Python作为一种高级编程语言,因其简洁的语法、强大的库支持和广泛的社区资源而在工业界获得了快速的发展和广泛的应用。在工业控制领域,Python的应用日益增多,这得益于其跨平台性、脚本语言的灵活性以及与硬件设备交互的能力。

2303_78014702的博客 1720

HashSet类源码详解

一、简介 1.存储结构 HashSet 的底层是利用HashMap(邻接表结构)进行存储的。 hashSet 将存入的元素作为 hashMap的key,而所有key对应的value都是一个用static final 修饰的, 名为PRESENT的Object 类对象(此对象有地址引用,但是实际内容为空)。 ·存储结构如图所示: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qMp8WCpv-1636560889790)(D:\1.code\IDEA_work\JAVA源码\J

LYQ20010417的博客 1051

告别QQ截图!用C# Winform + 百度AI,自己动手做一个免费的文字提取小工具

本文详细介绍了如何利用C# Winform和百度AI OCR接口开发一款免费的文字提取工具,替代QQ截图功能。通过智能截图模块、OCR服务集成和主界面功能整合,实现高效准确的文字识别,适用于日常办公和学习场景。工具支持图像预处理、异步处理和错误日志记录,提升用户体验和识别准确率。

weixin_30566063的博客 378

SAP 接口测试操作-业务顾问

业务顾问测试接口操作

weixin_43657667的博客 5156

Java集合中HashSet的底层源码解读

简单说,这段代码先判断你的table是否为空,如果为空,就将旧的容量设置为0,然后继续进行逻辑判断,显然这里oldCap = 0,所以直接进入到else语句的逻辑中,将默认的容量值赋给newCap,将临界容量设置为默认值 * 临界因子0*75,初始默认值为16,临界值为12.最后将有16个空间的table返回。或者是key不为空的情况下,利用equals方法判断传入的key和本来有的k是否相同,如果相同,将p的指向赋给e,p指向的是p指向当前索引为i的tab。

Jerferry的博客 817

ICESat-2数据下载的两种方法

ICESat-2数据下载

weixin_46341898的博客 2899

HashSet源码解析

前面我们花了一定的篇幅学习了HashMap的一些底层原理,以及简单了解了HashSet和HashMap两种集合的渊源,现在我们从HashSet源码入手,来学习HashSet更细节的地方。 对于HashSet而言,它是基于HashMap实现的。HashSet底层采用HashMap来保存元素,因此HashSet底层其实比较简单。 package java.util; public class H...

GarfieldEr007的专栏 981

运放专题:运算放大电路中的相位补偿

的方法

五花带点肉 2万+

微信小程序 - request:fail errcode:10011 cronet_error_code:0 error_msg:network change, cancel all task请求报错

微信小程序请求接口,报request:fail errcode:10011是什么原因,uniapp微信小程序request:fail errcode:10011 cronet_error_code:0 error_msg:network change, cancel all task,微信小程序wx.request常规访问接口,有个别用户的接口请求频繁报错,UniApp 微信小程序uni.request请求接口报错:request:fail errcode:10011 的原因分析与解决方案,苹果ios,安卓

🏆 前端领域优质创作者 4566

JDK17源码系列-HashSet源码解读

JDK17源码系列-HashSet源码解读

siyueguoji的博客 723

SA8295P QNX主机上电启动流程分析

嵌入式系统的启动过程对于确保系统正常运行至关重要。本文将详细分析SA8295P芯片在QNX主机上的上电启动流程,并提供相应的源代码示例。嵌入式系统的启动过程对于确保系统正常运行至关重要。本文将详细分析SA8295P芯片在QNX主机上的上电启动流程,并提供相应的源代码示例。以下是一个SA8295P QNX主机上电启动流程分析。

CodeMaven的博客 1230

HashSet 源码解读

看了下HashSet.java得源码,发现主要是基于HashMap来实现得,底层才用HashMap得操作数据。 构造函数 public HashSet() { this(new HashMap<E, HashSet<E>>()); } /** * Constructs a new instance of {@code Ha...

linhaosheng123456的博客 350

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

集合——HashSet 源码解读

Set 接口基本介绍 无序(添加和取出的顺序不一致),没有索引 不允许重复元素,所以最多包含一个null package collection_; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * @Author: Gin * @Description: 以 Set 接口的实现类 HashSet 来讲解 Set 接口 * @Modified By: Gin * @Date: C

qq_43575044的博客 360

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HashSet集合-源码解读

通过断点调试一步步来追踪解读HashSet底层的执行原理。

小古有趣 547

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashMap

一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之ArrayList 一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之LinkedList 一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashMap 一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashSet 关于HashMap的源码是这

诗水人间 10万+

HashSet底层源码解读

HashSet底层源码解读01 import java.util.HashSet; ​ public class HashSetSource { public static void main(String[] args) { ​ HashSet hashSet = new HashSet(); hashSet.add("Java"); hashSet.add("PHP"); hashSet.add("Java"); ...

lyllzcllf的博客 334

解读HashMap和HashSet的源码

一、HashSet (1)HashSet底层是HashMap 其实下面完全是因为hashmap的原因导致的 (2)添加一个元素时,先得到hash值–>会转成索引值 (3)找到存储数据表table,看到这个索引位置是否已经存放的有元素 (4)如果没有,直接加入 (5)如果有,调用equals比较,如果相同,就放弃添加,如果不同,则添加到最后 (6)在Java8中,如果一条链表的元素个数超过TREEIFY_THRESHOLD(默认是8),并且table的大小>=MIN_TREEIFY_CAPACI

JAVA领域优秀创作者 324
上一篇: jdk 1.7 hashMap源码解读
下一篇: mybatis sql 打印
javaee_ssh
博客等级 码龄18年 42粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值