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方法
原文:https://www.cnblogs.com/dadddd/p/12878384.html