记HashMap源码分析(jdk1.7)

来源:互联网 发布:地学软件 编辑:程序博客网 时间:2024/06/01 07:47

看了这篇文章:Java集合---HashMap源码剖析,大致意思是:

            hashMap底层主要是基于数组和链表来实现的。它维护了一个Entry数组,而Entry维护了一个链表。当put元素时候,会根据key值计算hash,再通过hash计算该元素的在Entry数组中的索引。如果该索引位置没有元素,就将该Entry放到该位置;如果有元素,就采用头插法,插入新的元素,next指向原来的entry。注意:null的key的索引位置为0;如果key存在的话(hash一致,并且equals),替换新值,返回老值。
            关于扩容,HashMap有容量、负载因子两个变量,可以在初始化时候指定,默认值是16和0.75,两个数的乘积为临界值,当map的容量达到临界值,并且计算的索引位置中有元素(我所看到的版本中是这样的,有的可能是只要达到临界值就扩容),才会进行扩容:扩容的容量是原来的容量的两倍。
           当get元素时候,根据key计算hash,再找到索引位置,遍历链表,找到该元素对应的值。