Java版本:1
2
3java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
HashMap由散列表结构实现。
HashMap 主要成员变量:
因子越小,冲突越少。因子越小,越容易触发扩容,从而使每个数组节点上的元素数减少,查找的效率也会提高,但是同时将会消耗不少的空间。
因子小,以空间换时间
因子大,以时间换空间
1 | /** |
Entry定义如下:
1 | static class Entry<K,V> implements Map.Entry<K,V> { |
put()
在执行put方法时,会判断key是否已经存入,如果存入,则覆盖之前的值,否则将通过addEntry()方法添加一个Entry对象。
addEntry()方法,如果size大于等于阀值(容量*加载因子)并且table[bucketIndex]元素不为空,将会触发扩容,bucketIndex计算结果类似于取余运算。
扩容时,将会把table容量扩大一倍,并将之前table中的值,通过transfer方法放入newtable中(重新hash),最后将newtable赋给table。
1 | /** |