HashMap
初始长度:1>>4 2^4=16
最大长度:1>>30 2^30
扩容时机:容量 >= 0.75f
扩容倍数:2倍
1.K可以为null
2.put(K,V)的时候,K重复了,V会被覆盖;put成功返回null,K有重复返回原来的V
3.可将hashmap分成两部分来看待,hash和map。map只是实现了键值对的存储,而其整个O(1)的查找复杂度很大程度上是由hash来保证的。
put发生扩容:
jdk1.7:对链进行遍历,数组中的索引位置,index是 keyHash 与 (table.length-1)进行让位 & 操作,存在线程安全问题
jdk1.8:keyHash与 oldTable.length 进行让位 & 操作,不存在线程安全问题
HashTable
初始长度:11
最大长度:1>>30 2^30
扩容时机:容量 >= 0.75f
扩容倍数:2倍+1
不同:HashTable是synchronized的;不接收K或V为null;迭代器不同;继承的类不同;有contains方法,比较的是V,HashMap只有containsKey、containsValue方法