HashMap小结
2016-05-07 本文已影响32人
Super_me14
HashMap数据结构
这周重点看了下hashmap的源码,这是种我们经常需要用的数据结构,因此有必要了解下它的组成。hashmap是由数组和链表组成的,在其构造函数上有两个参数,一个是容量另一个是负载因子。这两个决定了初始的hashmap能容纳多少。
HashMap存数据过程
大家都知道hashmap都是采用put(key,value)这个方式来存数据的吧,但是其中的过程确是另外的原理。当hashmap被new出来后,会用hash算法来来获取存放在数组的下标,也就是大家知道的bucket的位置。但是同时有个问题就是难道不会出现重复的位置吗?答案是肯定的。那就要使用剩下的链表来存储了。在链表的数据结构中有个next指针来。如果前面就有数据,就会把前一个数据存放在next指针中,然后新的数据放在链表的头部。
HashMap取数据过程
既然知道了存的过程必然也就想知道取数的过程了。在使用hashmap中用的是get(key)这个方法来取的,然而里面是通过上述的hash算法来取得对应的存放bucket位置下标。但是我们知道里面是个链表,也就意味着里面有许多数据,难道一个个都取出来吗。当然不是了,我们通过循环来用key.equeals()来一一比较。取出与之对应的那个value值。
最后讲几句
有人肯定会想到去优化hashmap,因为再每次使用的时候我们基本都是采用的默认的负载因子来确定hashmap的范围的,如果从开始就确定了数值,那么每次就不需要再去调用resize() 大大节省了许多时间。