HashSet的数据结构跟作用

Computers & Security 投稿实战:从零到一详解避坑指南 本文详细解析了向《Computers & Security》投稿的全流程避坑指南,包括ORCID账号注册、文件格式统一、Editorial Manager®系统操作技巧等关键步骤。特别强调了cover letter撰写、Declaration of Interest Statement准备以及PDF生成后的检查要点,帮助研究者高效完成投稿流程。 阅读详情

转自:https://www.cnblogs.com/runwulingsheng/p/5208762.html

(1) 为啥要用HahSet?
    假如我们现在想要在一大堆数据中查找X数据。LinkedList的数据结构就不说了,查找效率低的可怕。ArrayList哪,如果我们不知道X的位置序号,还是一样要全部遍历一次直到查到结果,效率一样可怕。HashSet天生就是为了提高查找效率的。

HashSet的查找效率高,我想是因为它是根据HashCode来存储对象的,所以在查找时,先计算出对象的HashCode,然后就可以根据这个来找出它的位置,查找速度应该是O(1),不过看了下面的解释,我这个猜想是错的

HashSet的底层是基于HashMap的,就是说它的数据结构是跟HashMap一样的。

但它存储的是对象,在Entry中,对象对应的是Key,而Value是固定的一个值(所有的对象对应的Value都是那个值---Object对象PRESENT)这样做的目的是为了符合HashMap的语法而已.

 4) HashSet 如何add机制

   假如我们有一个数据(散列码76268),而此时的HashSet有128个散列单元,那么这个数据将有可能插入到数组的第108个链表中(76268%128=108)。但这只是有可能,如果在第108号链表中发现有一个老数据与新数据equals()=true的话,这个新数据将被视为已经加入,而不再重复丢入链表。

HashSet的散列单元大小如何指定?

  Java默认的散列单元大小全部都是2的幂,初始值为16(2的4次幂)。假如16条链表中的75%链接有数据的时候,则认为加载因子达到默认的0.75。HahSet开始重新散列,也就是将原来的散列结构全部抛弃,重新开辟一个散列单元大小为32(2的5次幂)的散列结果,并重新计算各个数据的存储位置。以此类推下去.....

(5) 为什么HashSet查找效率提高了。

   知道了HashSet的add机制后,查找的道理一样。直接根据数据的散列码和散列表的数组大小计算除余后,就得到了所在数组的位置,然后再查找链表中是否有这个数据即可。

   查找的代价也就是在链表中,但是真正一条链表中的数据很少,有的甚至没有。几乎没有什么迭代的代价可言了。所以散列表的查找效率建立在散列单元所指向的链表中的数据要少 。

总结:虽然HashSet实现的是Set接口,存储时只是存储对象,不用存储键值对,但底层还是基于HashMap的,所以为了符合HashMap的语法,所有的对象都共享一个Object对象PRESENT为值

Probability and Statistics - 4th edition 立即下载

相关推荐

GD32F303片内FLASH实战:从地址映射到数据持久化存储

本文详细介绍了GD32F303片内FLASH的实战应用,从地址映射到数据持久化存储的全过程。通过解析FLASH的基础特性、安全操作区域规划、擦除写入读取的三重奏操作,以及工程化进阶技巧,帮助开发者高效利用片内FLASH进行数据存储。文章还提供了调试技巧和常见问题解决方案,特别适合嵌入式开发者在实际项目中应用。

weixin_26742753的博客 215

【数据结构】HashSet的底层数据结构

在哈希表中,最重要的是哈希值,哈希值就是对象的整数表现形式,HashSet 在存数据的时候,会根据数组长度和哈希值计算出要存入的位置,哈希值是根据hashCode()方法计算出来的int型的整数,hashCode()方法定义在Object类中,所有对象都可以调用,默认使用地址值进行计算,一般情况下,自定义的对象都要重写hashCode()方法,利用对象内部的属性值计算哈希值。

宁可枝头抱香死,何曾吹落北风中。 4409

Langchain4j 文档处理实战:从加载到分割的完整流程解析

本文详细解析了使用Langchain4j进行文档处理的完整流程,涵盖从文档加载、解析到分割的核心步骤。通过实战代码示例,重点介绍了如何利用文档分割器将大文档切割为适合大语言模型处理的片段,并提供了参数调优与避坑指南,帮助Java开发者高效构建AI应用的数据处理基础。

smartcontract5的博客 542

【数据结构】TreeMap及TreeSet

欢迎浏览高耳机的博客希望我们彼此都有更好的收获。

高耳机的博客 1039

保姆级教程:在RK3588平台上为IMX415 Sensor配置HDR2曝光(附完整代码与避坑点)

本文提供RK3588平台上为IMX415 Sensor配置HDR2曝光的详细教程,涵盖基础概念、限制条件、实战配置步骤及常见问题解决方案。通过完整代码示例和关键参数解析,帮助开发者高效实现HDR2曝光模式,提升图像质量并避开常见陷阱。

weixin_28685287的博客 283

LIS3DHTR三轴加速度计Arduino驱动与嵌入式集成指南

加速度计是嵌入式系统中实现运动感知、姿态解算和振动分析的核心传感器。其工作原理基于MEMS微机械结构在惯性力作用下的电容变化,经片内ADC转换为数字信号;I²C接口因其硬件资源占用少、布线简洁,成为低功耗物联网节点的主流通信方式。技术价值体现在高分辨率(12位)、多量程(±2g~±16g)与低功耗(待机电流仅2µA)的平衡,支撑电池供电设备长期运行。典型应用场景包括可穿戴设备的姿态识别、工业预测性维护中的振动监测,以及智能硬件的敲击/跌落检测。本文围绕LIS3DHTR芯片及其Grove模块,详解Arduin

weixin_42584758的博客 594

Java数据结构之HashMap与HashSet

在学习Java当中的HashMap与HashSet之前,我们先来了解一下什么是Map和Set。其实, Map与Set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。Map和Set是Java提供的一组接口,这里我们先谈谈它们的实例化子类HashMap与HashSet。

Mole3309的博客 758

eDP、DP与HDMI——现代显示接口的核心解析

eDP、DP和HDMI各有千秋:eDP以嵌入式设备的低功耗见长,DP凭借开放生态和高带宽成为专业领域首选,而HDMI则依靠庞大的消费电子生态稳居家庭市场。未来,随着Type-C接口的普及和超高清内容的爆发,三者的技术边界可能进一步融合,但各自的核心优势仍将长期共存。对于用户而言,选择接口需基于设备需求——游戏玩家青睐HDMI的VRR,设计师依赖DP的多屏扩展,而轻薄本则离不开eDP的紧凑设计。

麟的博客 8411

HashSet底层结构和源码分析

HashSet底层是HashMap 添加一个元素时,先得到hash值,然后转换成索引值 如果没有直接加入 如果有调用equals比较,如果相同,就放弃添加,如果不相同,则添加到最后 在java8中,如果一条链表的元素个数到达TREEIFY_THRESHOLD(默认是8),并且table的大小大于等于MIN_TREEIFY_CAPACITY(默认是64),就会进行树化(红黑树) ...

技术积累,技术分享 5685

基于STM32设计的老人摔倒检测报警系统(OneNet+MQTT)(235)

基于STM32设计的老人摔倒检测报警系统,不仅能够实时监测老人的位置信息,方便在紧急情况下快速定位,还能通过陀螺仪模块精确检测老人的身体姿态,一旦判断为摔倒状态,系统将立即触发蜂鸣器报警,并通过4G网络向指定联系人发送短信警示,确保老人能够迅速得到援助。此外,系统还支持老人主动按下设备上的按键发送求助短信,增强了系统的灵活性和实用性。

4690

IP-Guard分类管理详解

大家都知道在配置IPGUARD策略前需要做分类库进行设置和分类。 1、应用程序:可以分类,例如上班时间只能用OFFICE和WPS,记事本等办公软件,可以在分类里设置一个类 ;办公软件,在未分类里找到OFFICE,WPS等拖入心建的分类里就可以在配置策略里调用。 2、网站分类也不一样,可以按照自己方式自定义。也可以导入厂家已经收集到的网站分类。 3、邮箱分类:可以提前定义好一个或...

IP-Guard专栏 589

Java 基础篇--基础知识之集合HashSet

文章目录HashSet 简介一、实现原理二、源码分析2.1 继承与实现关系2.2 重要成员信息2.3 构造方法2.4 重要方法2.4.1 添加2.4.2 删除三、对应线程安全实现3.1 Collections 同步方法3.2 CopyOnWriteArraySet HashSet 简介 HashSet是一个没有重复元素的集合,是基于HashMap实现的,因此具有良好的存取和查找性能。但它不保证集合的迭代顺序,特别是它不保证该顺序恒久不变。 HashSet具体以下特点: 不保证元素的迭代顺序(HashMap

Blare的博客 2259

39、高频 LLC 谐振转换控制系统动态优化算法分析与研究

本文针对高频下LLC谐振转换器动态性能差的问题,提出一种基于谐振电容器充放电估计动态切换时间的优化控制算法。通过改进状态轨迹控制方法,突破传统算法在谐振频率与开关频率相等条件下的限制,并结合新型采样策略有效抑制电压过冲。算法在MATLAB和SABER中完成仿真验证,并搭建基于STM32F407的原型系统进行测试,结果表明该方法显著缩短动态响应时间,提升系统稳定性。研究为高频、高功率密度开关电源的动态优化提供了可行解决方案。

linux6sysadmin的博客 111

HashSet与HashMap之间的关系 LinkedHashMap作用

借鉴自

weixin_44230780的博客 253

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IDEA-HashSet集合

HashSet集合 import java.util.HashSet; import java.util.Iterator; import java.util.Set; /* java.util.Set接口 extends Collection接口 Set接口的特点; 1.不允许存储重复的元素 2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历 java.util.HashSet集合 implements Set接口 Ha

weixin_46370945的博客 390

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

HashSet

baidu_37278726的博客 380

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

关于HashSet的五个问题

当元素插入到哈希表中时,通过哈希函数计算得到元素的哈希码,并据此确定元素应该存储在数组的哪个槽位上。哈希函数将元素的键(或值)映射到数组的索引位置上,理想情况下,不同的元素应该被映射到不同的数组位置上,从而实现均匀的分布。当你遍历 HashSet 中的元素时,元素的顺序看起来是随机的,这是因为它们在哈希表中的存储位置是根据哈希码计算得到的,并不代表它们被插入集合的顺序。HashSet 添加元素的过程涉及哈希码的计算、数组的索引定位、哈希冲突的解决以及重复元素的检查,这些步骤保证了元素的唯一性和高效的存储。

weixin_53891720的博客 1327

2.HashSet

Everthing is coming 439

集合——HashSet数据结构的底层结构

我们都知道hashset是set接口的实现类,set的特点是无序、唯一,使用起来也很简单无脑,但hashset底层是怎么实现的?如何保证它的唯一性呢?那我们就一起来探讨一下hashset数据结构的底层结构。 进入hashset类的源码发现,它的构造方法里维护了一个hashmap。 public HashSet() { map = new HashMap<>(); } 再看一下它的add方法,发现hashset的add方法,就是调用hashmap的put方法,插入的对象为key

qq_45932382的博客 1568

你真的了解HashSet集合么?

HashSet集合1.带着问题学习?2.问题答案:3.源码分析,证明答案 概述:你真的了解HashSet集合么?用了怎么久的集合你真的了解集合么? **注意:该文章是基于JDK8讲解的** 那不妨先看几个问题,如果你都能知道那么就说明你真的了解,如果感觉似曾相识,但是又说不上来,那么就是认真的往下看吧? 想要看懂集合源码需要具备哪些知识? 数据结构和算法,javaSE的面向对象,进制转换,以及java的一些运算符,比如位移,异或等等。 理解源码的方式就是打断点一步一步的跟踪,看源代码是如何执行的,遇到看不懂

客官不爱喝酒的博客 441

HashTable, HashSet, HashMap的区别

hash是一种很常见也很重要的数据结构,是用hash函数根据键值(key)计算出存储地址,以便直接访问。由完美hash函数(即键值和地址是一一对应的)计算出的地址,在访问时,时间复杂度为O(1)。java的Object对象提供了hashCode()这个方法,该方法返回一个hash值。对于变量,该方法一般返回该变量的内存地址。在使用java的HashMap对象时,该方法和equals()方法一起使用,

馨子宇 338

Java集合----HashSet的实现原理

1. HashSet概述      HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 2. HashSet的实现      如果不等,则添加到该数组索引对应的链表中。 ---------------------------------------------------

lk782558827的专栏 609

一道HashSet面试题引发的蝴蝶效应

没错,我又借着“面试题”的名头来搞事情了,今天要说的是 HashSet ,而这确实是一个实际面试中遇到的问题。当时的场景大概是这样的,面试官在了解了你的知识广度以后,决心来考察一番你的基本功底,抛出了一个看起来平平无奇的问题:说一说你平时工作中都用到了哪些数据结构。你心想,这还不简单,Array、ArrayList、List、Dictionary、HashSet、Stack、Queue…等等各种集合类简直如数家珍,甚至你还能说出这些数据结构间的优劣以及各自使用的场景。可没想到,面试官话锋一转,直接来一句,“

素履独行 | 元培的个人博客 4924

理解HashSet及使用

(1) 为啥要用HahSet?     假如我们现在想要在一大堆数据中查找X数据。LinkedList的数据结构就不说了,查找效率低的可怕。ArrayList哪,如果我们不知道X的位置序号,还是一样要全部遍历一次直到查到结果,效率一样可怕。HashSet天生就是为了提高查找效率的。 (2) hashCode 散列码     散列码是由对象导出的一个整数值。在Object中有一个hashCod

li295214001的专栏 1296

HashSet如何保证元素的唯一性

HashSet的底层实现是哈希表,也就是说,保证元素的唯一性的第一层保证就是元素的HashCode。下面我们从源码的角度来分析:当我们向HashSet中插入一个元素的时候,发生了什么。 public HashSet() { map = new HashMap<>(); }这里HashSet的构造函数调用了HashMap, public class HashMap

dajiangqingzhou的专栏 1005
上一篇: HashTable原理
下一篇: char跟varchar的区别
AAA821
博客等级 码龄14年 19粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值