HashMap

HashMap

1.7 1.8有什么区别

扩容机制: 2^n   为什么

    LoadFactory 为什么是0.75

线程不安全

重写equals 必须重写HashCode

 

 

1.7 1.8有什么区别

1.8引入红黑树(为什么不是二叉搜索:二叉搜索维护成本太大),再每个哈希槽超过8的时候,链表模式改为红黑树,优化查询。

1.7插入是头插法,多线程会有死循环,1.8为尾插法

 

扩容为什么每次都是2倍

查找槽位的时候为:hashCode & (len -1)   

本来应该用取余的方法,但是取余太慢,所以用&(len-1)的方法,与取余结果一致

 

LoadFactory为什么是0.75

loadFactory太大会导致冲突太多,查询与维护变慢,太小会导致一直扩容,浪费空间。取中间值是两个平衡,

但是为什么不是0.8呢?因为哈希插入的时候还符合0.5的泊松分布,(后面我就不记得了)

 

线程不安全

线程不安全的,没有加锁

 

重写equals 必须重写HashCode

为了让不同的KV的HashMap 得到相同的equals,所以需要将不同的Key放到同一个卡槽,比如 key1 和key2 本应该放在两个槽点,但是如果需要放到同一个槽点的话 需要让每一个的hashCode & (len -1)相同,所以需要重写hashCode方法

posted @ 2020-05-12 20:19  猪是得念来过倒  阅读(137)  评论(0编辑  收藏  举报