哈希表和哈希算法冲突


哈希表(k,v)数组,根据相应的哈希算法计算key的下标,返回值就是v存储的数组下标
哈希算法:f(K) -> int即为v需要存储的数组下标
哈希算法:%16
查找,添加元素:O(1)

哈希冲突解决办法:
哈希算法计算的两个不同对象的哈希值相等的情况
eg:1%16==17%16
a、开放定址法
寻找下一个为null的数组下标,而后将冲突元素存储

b、载散列法
再次使用一个不同的哈希算法再次计算一次

c、链地址法(拉链法):HashMap使用此方法来解决哈希冲突
将所有冲突元素按照链表存储
O(1+n)
HashMap允许key,value为null
Hashtable,key和value都不能为空 空指针异常
TreeMap,由于必须实现排序,所以key不能为空,value可以 空指针异常


跟据线程安全性:
HashMap、TreeMap采用异步处理,线程不安全,性能较高
Hashtable采用synchronized同步方法,线程安全,性能较低(锁的是整个哈希表,读读互斥)

内部属性
负载因子loadFactor,默认为0.75f
实际容量 int threshold
树化阈值 int TREEIFY——THRESHOLD = 8
解除树化阈值 un = 6
HashMap采用懒加载策略,第一次put时初始化哈希表


7.HashMap源码解析(负载因子,树化策略,内部hash实现,resize策略..)
8.ConcurrentHashMap是如何高效实现线程安全?
9.ConcurrentHashMap jdk1.7 与 jdk1.8的区别

 6.HashMap,TreeMap,HashTable的关系与区别
a、这三个类都是Map接口下的常用字类,Hashtable基于哈希表实现,TreeMap基于红黑树实现,HashMap基于哈希表+红黑树

猜你喜欢

转载自www.cnblogs.com/hetaoyuan/p/11241820.html