一、HashMap 的底层实现
HashMap 底层是基于数组和链表实现的。其中最重要的参数:容量和负载因子。
容量的默认大小事 16,负载因子是 0.75,当 HashMap 的
size>16*0.75 的时候就会发生库容(容量和负载因子都可以自由
调整)
Hashmap 实现了 Map 接口,允许放入 null 元素,出了该类未实现同步外,其
余和 HashTable 大致相同,跟 TreeMap 不同,该容器不保证冤死顺序,根据
需要该容器可能对元素重新哈希,元素的顺序也会被重新打散,因此不同时间
迭代同一个 HashMap 的顺序可能会不同。
二、HashMap 的 put(key,value)方法
首先会将传入的可以、做 hash 运算计算出 hashCode,然后根据数组长度取模
计算出在数组中的 index 下表
由于在计算机中位运算比取模运算效率高,所以 HashMsap 规定数组的长度为
2n。这样用 2n-1 做位运算与取模效果一致,并且效率要高出许多
由于数组的长度有限,所以难免出现不同放入 key 通过运算得到的 index 相同,
这种情况可以利用链表来解决,HashMap 会在 table[index]出形成链表,采用
头插法将数据插入链表中
三、HashMap 的 get(key)fangfa
get 和 put 类似,也是讲传入的可以计算出 index,如果该位置上是一个链表就
需要比那里整个链表,通过 key.equals(k)来找到对应的元素。
遍历方式:
第一种
Iterator<Map.Entry<String, Integer>>
entryIterator=map.entrySet().iterator();
while(entryIterator.hasNext()){
Map.Entry<String,Integer> next=entryIterator.next();