您的位置:首页 > 编程语言 > Java开发

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java hashmap