HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。HashMap储存的是键值对,HashMap很快。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。也可以看作是数组和链表结合组成的复合结构。
put原理:
当执行HashMap.put方法时,把key经过hash算法,然后插入,如果已经有值,那么 entry next指向新插入的,新插入的next为null
代码实现:通过hash算法,得到index,然后插入到对应的坐标中。
get原理:
当执行HashMap.get方法时,把key经过hash算法,然后去查找,如果查到则返回value,如果没有查到则返回null
代码:通过hash算法,得到index,然后去对应的坐标中查找并返回值。
扩容:
“如果HashMap的大小超过了负载因子(load factor)定义的容量,默认的负载因子大小为0.75,也就是说,当一个map填满了75%的bucket时候,和其它集合类(如ArrayList等)一样,将会创建原来HashMap大小的两倍的新数组(jdk1.7,但不超过最大容量),来重新调整map的大小,并将原来的对象散列到新数组中。
代码实现:当使用数量大于数组大小*负载因子时,那么开始扩容