hashMap的实现_散列表满时由链表转为-程序员宅基地

技术标签: 数据结构  

hashMap

    前几天,看了关于hashmap的实现视频,为此整理一下。

视频网站:http://www.56.com/u32/v_MTM5NDE0NjM3.html

1.     使用哈希表实现,键不能重复,如果重复就会覆盖原来的对象

2.     哈希表为数组加链表,数组的每一个元素为一个链表

3.     HashMap的键值的范式设为引用数据类型

例:Map<Integer,String> map = new HashMap<>();

   或Map< String,String>map = new HashMap<>();

4.     判断键或值是否存在,map.containsKey(键)或map.containsKey(“值”);

5.     hashMap的默认初始容量16和默认加载因子为0.75.

当数组达到75%的容量时,会重新扩充(哈希表重新散列),扩充50%

达到75%会认为格子里的链表很长,会重新计算位置。

当链表长度大于一定阈值时,链表转换为红黑树,这样减少链表查询时间。

6.     源码中用Node类来存储key和value,用链表形式进行存储

7.     计算键在数组的位置

根据key对象的哈希值(hashcode),再除以当前容量值取余

例:map.put(“1”,”小明”);

其位置为System.out.println(”1”.hashCode()%16);

如果重新散列后,容量值变成24,几乎所有键的位置也会发生改变

8.     如果不同的键在数组的位置相同的话,仍在该以链表的方式存储

  1. HashMap在底层将key-value当成一个整体进行处理,这个整体就是一个Node对象。HashMap底层采用一个Node[]数组来保存所有的key-value对,当需要存储一个Node对象时,会根据key的hash算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Node时,也会根据key的hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该Node。
  2. HashMap进行数组扩容需要重新计算扩容后每个元素在数组中的位置,很耗性能
  3. 采用了Fail-Fast机制,通过一个modCount值记录修改次数,对HashMap内容的修改都将增加这个值。迭代器初始化过程中会将这个值赋给迭代器的expectedModCount,在迭代过程中,判断modCount跟expectedModCount是否相等,如果不相等就表示已经有其他线程修改了Map,马上抛出异常
参考文献: http://zhangshixi.iteye.com/blog/672697  
参考文献: http://blog.csdn.net/lizhongkaide/article/details/50595719
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37862376/article/details/79567528

智能推荐

深度学习-网络模型的可视化工具总结_深度学习模型可视化-程序员宅基地

文章浏览阅读2.3k次,点赞8次,收藏23次。使用Keras.js,可以轻松地生成神经网络模型的摘要。摘要提供了模型的层级结构、层级名称、输出形状和可训练参数数量等信息。这有助于用户快速了解模型的组成和规模。_深度学习模型可视化

debian配置samba_debian 怎么配置samba虚拟用户-程序员宅基地

文章浏览阅读1k次。1、安装samba相关软件包apt-get install samba smbclient2、添加用户到samba的共享用户组 方法1 在/etc/group文件中 sambashare:x:112: 的后面添加用户名 添加后结果如下(不要有空格): sambashare:x:112:liuzhiping 方法2 _debian 怎么配置samba虚拟用户

oracle表锁了会报错吗,Oracle 解锁被锁住的表-程序员宅基地

文章浏览阅读651次。在使用数据库时候,难免会遇到在想修改表结构的时候,表被锁住。那么被锁住的时候会出现什么错误呢?在行: 2 上开始执行命令时出错 -alter table HTL_STATIC_HOTEL modify ROOM_TOTAL_AMOUNT number(12,2)错误报告 -ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效00054. 00000 - "res..._missing or invalid session id

UE4插件_ue4如何定位到插件的路径-程序员宅基地

文章浏览阅读1.4w次。UE4插件官方文档翻译_ue4如何定位到插件的路径

(FortiGate)飞塔防火墙通过CLI底层刷入OS-程序员宅基地

文章浏览阅读842次。1. 准备好串口线,下图为串口线的图片2. 电脑准备好TFTP的小软件。 我们这里用的是3CDaemon。打开软件设置好上传/下载的文件夹,然后将我们需要导入防火墙的OS文件放到该文件夹目录下3. 打开Secure-CRT软件,设置好相应的连接参数,具体如下4. 准备好以上事项后,我们开始通过SecureCRT进行底层刷入OS的动作,首先将电脑和防火墙用串口线(Console..._fortigate tftp命令

DL框架之Keras:深度学习框架Keras框架的简介、安装(Python库)、相关概念、Keras模型使用、使用方法之详细攻略_keras——keras简介、安装及backend-程序员宅基地

文章浏览阅读6.8w次,点赞41次,收藏232次。​DL框架之Keras:深度学习框架Keras框架的简介、安装(Python库)、相关概念、Keras模型使用、使用方法之详细攻略目录Keras的简介3、Keras的用户体验Keras的安装Keras的使用方法其他概念Keras的中的模型使用相关文章DL框架之Keras:Python库之Keras库的简介、安装、使用方法详细攻略keras-yolo3:python库之keras-yolo3的简介、安装、使用方法详细攻略Keras的简介_keras——keras简介、安装及backend

随便推点

Android MMC/EMMC/MTD Partition Layout-程序员宅基地

文章浏览阅读366次。Android devices have a couple of partitions to store different data.The common ones are the recovery, boot, system, data and cache partitions.Almost every device has it’s own unique layout even th..._e mmc internal sizes and related units / granularities

天猫超市香港奇遇记:老干妈饭扫光成港人最爱-程序员宅基地

文章浏览阅读248次。在香港中环高耸入云的5A写字楼里做金融,是很多人梦寐以求的工作场景。然而供职于一家美资投资银行的丁女士却发现,办公桌上常备小小酥、果脯和辣条才是她缓解工作压力的不二法门。对于很多投行员工来说,在办公室呆上至少12小时是家常便饭,而办公楼附近偏偏吃的又极少。“忙起来早餐和午饭都不吃,就要靠桌子上的零食撑过一天,”丁女士说。2017年春节结束,她和家人从内...

距离度量 —— 杰卡德距离(Jaccard Distance)_jaccard距离-程序员宅基地

文章浏览阅读7.7k次。杰卡德距离(Jaccard Distance),是用来衡量两个集合差异性的一种指标,它是杰卡德相似系数的补集。杰卡德相似系数(Jaccard similarity coefficient):两个集合 A 和 B 的交集元素在 A,B 的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号 J(A,B)J(A,B)J(A,B) 表示,则其表达式为:J(A,B)=∣A∩B∣∣A∪B∣J(A,B)=\frac{|A\cap B|}{|A\cup B| }J(A,B)=∣A∪B∣∣A∩B∣​杰卡德距离(Jacca_jaccard距离

厦门大学计算机研究生多难考,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...-程序员宅基地

文章浏览阅读322次。该楼层疑似违规已被系统折叠隐藏此楼查看此楼再写一下我的初试经验。今天晚上有时间再更初试政治:政治切忌开始太早,战线过长,我是从9月开始,跟着肖秀荣的视频课看了一遍精讲精练,做了一遍1000题,一遍真题,一遍肖八,一遍肖四,还有切忌闭门造车,一定要跟着一个老师学,而且最好是只跟一个老师,肖秀荣徐涛等都可以,政治不存在采百家之长的学法,每个老师思路并不完全一样,跟着一个老师效果会比混杂着学效果可能更..._厦门大学计算机研究生好考吗

320000字2024春招高频面试真题汇总,华为面试笔试题库-程序员宅基地

文章浏览阅读281次,点赞5次,收藏10次。笔者已经把面试题和答案整理成了面试专题文档网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!统化的资料的朋友,可以添加V获取:vip1024b (备注Java)**

推荐文章

热门文章

相关标签