在java的世界里,无论类还是各种数据,其结构的处理是整个程序的逻辑以及性能的关键.由于本人接触了一个有关性能与逻辑同时并存的问题,于是就开始研究这方面的问题.找遍了大大小小的论坛,也把«java 虚拟机规范»,«apress,.java.collections.(2001),.bm.ocr.6.0.shareconnector»,与«thinking in java»翻了也找不到很好的答案,于是一气之下把jdk的 src 解压出来研究,扩然开朗,遂写此文,跟大家分享感受与顺便验证我理解还有没有漏洞. 这里就拿hashmap来研究吧. hashmap可谓jdk的一大实用工具,把各个object映射起来,实现了“键--值”对应的快速存取.但实际里面做了些什么呢? 在这之前,先介绍一下负载因子与容量的属性.大家都知道其实一个 hashmap 的实际容量就 因子*容量,其默认值是 16×0.75=12; 这个很重要,对效率很一定影响!当存入hashmap的对象超过这个容量时,hashmap 就会重新构造存取表.这就是一个大问题,我后面慢慢介绍,反正,如果你已经知道你大概要存放多少个对象,最好设为该实际容量的能接受的数字. 两个关键的方法,put与get: 先有这样一个概念,hashmap是声明了 map,cloneable, serializable 接口,与继承了 abstractmap 类,里面的 iterator 其实主要都是其内部类hashiterator 与其他几个 iterator 类实现,当然还有一个很重要的继承了map.entry 的 entry 内部类,由于大家都有源代码,大家有兴趣可以看看这部分,我主要想说明的是 entry 内部类.它包含了hash,value,key 与next 这四个属性,很重要.... 下一页