2022年Java中对HashMap的深度分析Java教程.docx
《2022年Java中对HashMap的深度分析Java教程.docx》由会员分享,可在线阅读,更多相关《2022年Java中对HashMap的深度分析Java教程.docx(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2022年Java中对HashMap的深度分析Java教程在Java的世界里,无论类还是各种数据,其结构的处理是整个程序的逻辑以及性能的关键。由于本人接触了一个有关性能与逻辑同时并存的问题,于是就起先探讨这方面的问题。找遍了大大小小的论坛,也把Java 虚拟机规范,apress,.java.collections.(2022),.bm.ocr.6.0.shareconnector,和Thinking in Java翻了也找不到很好的答案,于是一气之下把JDK的 src 解压出来探讨,扩然开朗,遂写此文,跟大家共享感受和顺便验证我理解还有没有漏洞。 这里就拿HashMap来探讨吧。HashMap
2、可谓JDK的一大好用工具,把各个Object映射起来,实现了“键值”对应的快速存取。但实际里面做了些什么呢?在这之前,先介绍一下负载因子和容量的属性。大家都知道其实一个 HashMap 的实际容量就 因子*容量,其默认值是 160.7512; 这个很重要,对效率很肯定影响!当存入HashMap的对象超过这个容量时,HashMap 就会重新构造存取表。这就是一个大问题,我后面渐渐介绍,反正,假如你已经知道你也许要存放多少个对象,最好设为该实际容量的能接受的数字。两个关键的方法,put和get:先有这样一个概念,HashMap是声明白 Map,Cloneable, Serializable 接口,
3、和继承了 AbstractMap 类,里面的 Iterator 其实主要都是其内部类HashIterator 和其他几个 iterator 类实现,当然还有一个很重要的继承了Map.Entry 的 Entry 内部类,由于大家都有源代码,大家有爱好可以看看这部分,我主要想说明的是 Entry 内部类。它包含了hash,value,key 和next 这四个属性,很重要。put的源码如下public Object put(Object key, Object value) {Object k = maskNull(key);这个就是推断键值是否为空,并不很深邃,其实假如为空,它会返回一
4、个static Object 作为键值,这就是为什么HashMap允许空键值的缘由。int hash = hash(k);int i = indexFor(hash, table.length);这连续的两步就是 HashMap 最牛的地方!探讨完我都汗颜了,其中 hash 就是通过 key 这个Object的 hashcode 进行 hash,然后通过 indexFor 获得在Object table的索引值。table?不要惊异,其实HashMap也神不到哪里去,它就是用 table 来放的。最牛的就是用 hash 能正确的返回索引。其中的hash算法,我跟JDK的作者 Doug 联系过,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 Java HashMap 深度 分析 教程
限制150内