HashMap小结
2016-04-28 14:31
302 查看
hashMap是一种采用哈希算法的数组和链表相结合的数据结构。可能和其他的文章的不同, 我这儿分析hashmap都是一些自己的看法。在HashMap构造 函数中存在着两个参数一个是容量一个是负载因子, 两者相乘就是这个map的容量。
前面说过hashmap中包含着数组和链表两种结构。其中的数组采用的是Entry[]数组来存放hashmap的key值。当然也得讲讲Entry的结构了 这是有key, value,hash 和 next Entry[] 引用组成的。在存放map数据的时候,首先是通过hash算法来取得key的hash值,如果存放数据的key的hash值是相同的,那么他们将被存放在同一个链表里面 。同时如果前面链表中有数值那么 ,新放进去的数据将会取代前一个数据位置存放在链表的头部位置。这便是我理解的hashmap存的过程。
再来说说hashmap的取数据的过程吧,首先没有意外的是通过key的hash值找到Entry[]数组中的链表, 此处想说一下hash值的寻找方案,因为真的很高效,hashmap中存取的size的扩展是两倍关系,即每次乘以2。这种方法的好处在于寻找对应的hash值只需要通过hash与数组length-1相与后就能的到数组的下标。这个相比与取余计算大大降低了计算量。在取得key所在的对应的链表后, 通过key 的equal来比较链表中的Entry就能得到需要的value。
上述就是我所了解的hashmap的整个流程。再来说说优化吧,因为hashmap整个是能resize扩展的,如果能在使用hashmap 的时候固定好使用的大小不需再次resize,这个能大大提高hashmap的性能。
[b] [/b]
前面说过hashmap中包含着数组和链表两种结构。其中的数组采用的是Entry[]数组来存放hashmap的key值。当然也得讲讲Entry的结构了 这是有key, value,hash 和 next Entry[] 引用组成的。在存放map数据的时候,首先是通过hash算法来取得key的hash值,如果存放数据的key的hash值是相同的,那么他们将被存放在同一个链表里面 。同时如果前面链表中有数值那么 ,新放进去的数据将会取代前一个数据位置存放在链表的头部位置。这便是我理解的hashmap存的过程。
再来说说hashmap的取数据的过程吧,首先没有意外的是通过key的hash值找到Entry[]数组中的链表, 此处想说一下hash值的寻找方案,因为真的很高效,hashmap中存取的size的扩展是两倍关系,即每次乘以2。这种方法的好处在于寻找对应的hash值只需要通过hash与数组length-1相与后就能的到数组的下标。这个相比与取余计算大大降低了计算量。在取得key所在的对应的链表后, 通过key 的equal来比较链表中的Entry就能得到需要的value。
上述就是我所了解的hashmap的整个流程。再来说说优化吧,因为hashmap整个是能resize扩展的,如果能在使用hashmap 的时候固定好使用的大小不需再次resize,这个能大大提高hashmap的性能。
[b] [/b]
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c语言实现hashmap(转载)
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序