哈希表(k,v)数组,根据相应的哈希算法计算key的下标,返回值就是v存储的数组下标哈希算法:f(K) -> int即为v需要存储的数组下标哈希算法:%16查找,添加元素:O(1)哈希冲突解决办法:哈希算法计算的两个不同对象的哈希值相等的情况eg:1%16==17%16a、开放定址法寻找下一个为null的数组下标,而后将冲突元素存储b、载散列法再次使用一个不同的哈希算法再次计算一次c、链地址法(拉链法):HashMap使用此方法来解决哈希冲突将所有冲突元素按照链表存储O(1+n)HashMap允许key,value为nullHashtable,key和value都不能为空 空指针异常TreeMap,由于必须实现排序,所以key不能为空,value可以 空指针异常跟据线程安全性:HashMap、TreeMap采用异步处理,线程不安全,性能较高Hashtable采用synchronized同步方法,线程安全,性能较低(锁的是整个哈希表,读读互斥)内部属性负载因子loadFactor,默认为0.75f实际容量 int threshold树化阈值 int TREEIFY――THRESHOLD = 8解除树化阈值 un = 6HashMap采用懒加载策略,第一次put时初始化哈希表 7.HashMap源码解析(负载因子,树化策略,内部hash实现,resize策略..) 8.ConcurrentHashMap是如何高效实现线程安全? 9.ConcurrentHashMap jdk1.7 与 jdk1.8的区别
6.HashMap,TreeMap,HashTable的关系与区别a、这三个类都是Map接口下的常用字类,Hashtable基于哈希表实现,TreeMap基于红黑树实现,HashMap基于哈希表+红黑树