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方法

 

posted on 2018-05-11 18:53  MC伍  阅读(129)  评论(0编辑  收藏  举报