HashSet源码分析

HashSet内部实现很简单,只要看明白HashMap,就可以了

类图结构:
在这里插入图片描述

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable
{
    static final long serialVersionUID = -5024744406713321676L;
    //HashSet内部就是通过一个固定Value的HashMap来实现
    private transient HashMap<E,Object> map;
    // PRESENT 就是map中固定的Value,每个key都是这个Value
    private static final Object PRESENT = new Object();
    //默认构造方法
    public HashSet() {
        map = new HashMap<>();
    }
	//带原值构造方法,具体细节可以参考HashMap对应的构造方法
    public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c); //将原值加入到新容器中
    }

    //指定大小和扩容系数的构造方法
    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }

    //指定大小的构造方法
    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }

    //用LinkedHashMap实现的构造方法
    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

    //迭代器,内部实现是HashMap的迭代器,细节可以看HashMap中关于迭代的这一章节
    public Iterator<E> iterator() {
        return map.keySet().iterator();
    }

    //取大小
    public int size() {
        return map.size();
    }

    //判空
    public boolean isEmpty() {
        return map.isEmpty();
    }

    //判断包含某key
    public boolean contains(Object o) {
        return map.containsKey(o);
    }

    //往HashSet中添加元素,看HashMap.put方法
    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

    //移除元素,看HashMap.remove方法
    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }

    //清空,看HashMap.clear方法
    public void clear() {
        map.clear();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/139831.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java图像编程之:Graphics2D

一、介绍 1、Java图像编程的核心类 BufferedImage&#xff1a;用于表示图像的类&#xff0c;可以进行像素级的操作。Image&#xff1a;表示图像的抽象类&#xff0c;是所有图像类的基类。ImageIcon&#xff1a;用于显示图像的类&#xff0c;可以将图像嵌入到Swing组件中。Ima…

全国不同级别高炉炼铁主要操作指标与分析

参考网址&#xff1a;https://www.zgltw.cn/liantiexinjishu/2020/0114/23584.html &#xff08;中国炼铁网&#xff09; 参考网址&#xff1a;https://www.zgltw.cn/liantiexinjishu/2020/0114/23584.html &#xff08;中国炼铁网 世界金属导报&#xff09;

RT-DETR算法优化改进:可变形大核注意力(D-LKA Attention),超越自注意力,实现暴力涨点 | 2023.8月最新发表

💡💡💡本文独家改进: 可变形大核注意力(D-LKA Attention),采用大卷积核来充分理解体积上下文的简化注意力机制,来灵活地扭曲采样网格,使模型能够适当地适应不同的数据模式 1)代替RepC3进行使用; 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.n…

Transformer详解一:transformer的由来和先导知识

目录 参考资料前言一、预训练二、神经网络语言模型&#xff08;NNLM&#xff09;&#xff1a;预测下一个词one-hot编码的缺陷词向量&#xff08;word embedding&#xff09; 三、Word2Vec模型&#xff1a;得到词向量CBOWSkip-gramWord2Vec和NNLM的区别Word2Vec的缺陷 四、ELMO模…

Python实现WOA智能鲸鱼优化算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

Juniper SRX PPPoE配置

直接上配置脚本 6号口接运营商进行拨号 ---------- set interfaces ge-0/0/6 unit 0 encapsulation ppp-over-ether set interfaces ge-0/0/6 description "Connect_to_Modem" set interfaces pp0 unit 0 pppoe-options underlying-interface ge-0/0/6.0 set inte…

Linux(命令)——结合实际场景的命令 查找Java安装位置命令

前言 在内卷的时代&#xff0c;作为开发的程序员也需要懂一些Linux相关命令。 本篇博客结合实际应用常见&#xff0c;记录Linux命令相关的使用&#xff0c;持续更新&#xff0c;希望对你有帮助。 目录 前言引出一、查找Java安装位置命令1、使用which命令2、使用find命令3、查…

《OSTEP》信号量(chap31)

〇、前言 本文是对《OSTEP》第三十一章的实践与总结。 一、信号量 以下各个版本都是一个生产者-消费者模型&#xff0c;基于信号量实现&#xff0c;并且逐渐完善。 #include <pthread.h> #include <semaphore.h> #include <stdio.h> #define MAX 10int b…

『亚马逊云科技产品测评』活动征文|搭建带有“弱”图像处理功能的流媒体服务器

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 本文基于以下软硬件工具&#xff1a; aws ec2 frp-0.52.3 mediamtx-1.3…

RT-DETR算法优化改进: 一种新颖的可扩张残差(DWR)注意力模块,加强不同尺度特征提取能力

💡💡💡本文全网首发独家改进:一种新颖的可扩张残差(DWR)注意力模块,加强不同尺度特征提取能力,创新十足,独家首发适合科研 1)代替RepC3进行使用; 2)DWR直接作为注意力进行使用; 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/…

双十一钜惠!三门不可多得的HarmonyOS学习教程

今年双十一&#xff0c;各大商城优惠不断。这里介绍三门不可多得的HarmonyOS学习教程&#xff0c;都有非常大的折扣优惠。 《鸿蒙HarmonyOS手机应用开发实战》 《鸿蒙HarmonyOS手机应用开发实战》是由清华大学出版社出版的。 目前当当是“7.56折”&#xff1a;http://produc…

RT-DETR算法优化改进:新颖的多尺度卷积注意力(MSCA),即插即用,助力小目标检测 | NeurIPS2022

💡💡💡本文独家改进: 多尺度卷积注意力(MSCA),有效地提取上下文信息,新颖度高,创新十足。 1)代替RepC3进行使用; 2)MSCAAttention直接作为注意力进行使用; 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/category_12497375.ht…

app软件开发多少钱?功能会影响价格吗?

随着智能手机的普及&#xff0c;app开发市场日益繁荣&#xff0c;很多人都有开发app的梦想&#xff0c;但开发一款app需要多少钱呢?功能是否会影响价格?本文将为你揭开这个谜团。 一、app开发费用的影响因素 app开发费用受到多种因素的影响&#xff0c;例如开发难度、功能复…

【Linux】第十六站:进程地址空间

文章目录 一、程序地址空间1.内存的分布2.static修饰后为什么不会被释放3.一个奇怪的现象 二、进程地址空间1.前面现象的原因2.地址空间究竟是什么&#xff1f;3.为什么要有进程地址空间4.页表5.什么叫进程&#xff1f;6.进程具有独立性。为什么&#xff1f;怎么做到呢&#xf…

通讯协议学习之路(实践部分):SPI开发实践

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 本文…

2023/11/13JAVA学习

字节数组增大的同时,运行速度也会加快,但是大到一定程度就不行了 要想追加数据,要在低级流后面加true,高级流后面加不了 不是乱码,不是让人看的 保持数据一一对应 否则会报错 下载后,拷贝到一个包里,再 comment是你想添加的注释 txt文本也可

《005.SpringBoot之仓库管理系统》【有文档】

《005.SpringBoot之仓库管理系统》【有文档】 项目简介 [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;IDEA jdk1.8 Maven MySQL8.0 技术栈; 后台&#xff1a;SpringBootMybatisPlus; 前端&#xff1a;thymeleaf; [2]功能模块展示&#xff1a; 1.基础…

相机以及其它传感器传感器

深度相机点云质量对比 比较点云质量时需要注意的点&#xff1a; 1.对特殊材质、颜色的检测效果&#xff1a;透明塑料、金属、毛玻璃、高反光物体&#xff08;镜子、水坑&#xff09;、吸光物体&#xff08;黑色物体&#xff09;。 2.特殊环境&#xff1a;雨、雪、雾、明暗交替位…

RT-DETR算法优化改进:Backbone改进 | HGBlock完美结合PPHGNetV2 RepConv

💡💡💡本文独家改进: PPHGNetV2助力RT-DETRHGBlock与PPHGNetV2 RepConv完美结合 推荐指数:五星 HGBlock_PPHGNetV2 | 亲测在多个数据集能够实现涨点 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/category_12497375.html ✨✨✨魔改创新RT-DETR…

Windows电脑如何一键还原系统?

​如果系统出现故障并且需要将电脑一键还原进行修复&#xff0c;以下是在不同版本的Windows操作系统中一键还原系统的操作步骤。 对于 Windows 10/11&#xff1a; 1.按下键盘上的 "Win I" 组合键&#xff0c;打开设置。 2.在设置中选择 "系统" 选项。…