HashMap LinkHashMap HashTable 特性
HashMap
- 线性不安全
- 初始大小16,负载因子0.75,扩容2倍
- 长度一般为2^n 次方,主要是为了效率碰撞较少
- 数组+链表方式
- key可以为null,做了处理
- 继承AbstractMap,实现Map方法
- 重新计算hash值
LinkHashMap
- 线性不安全
- 初始大小16,负载因子0.75,扩容2倍
- 长度一般为2^n 次方,主要是为了效率碰撞较少
- 数组+双向链表方式
- key可以为null,做了处理
- 继承AbstractMap,实现map方法
- 重新计算hash值
- LRU算法,保留6个值,后面
HashTable
- 线性安全的基本上方法都有synchronized关键字
- 初始大小11,负载因子0.75,扩容2n+1
- 长度一般为2^n 次方,主要是为了效率碰撞较少
- 数组+链表方式
- key不可以为null,会抛异常
- 继承Dictionary类,实现Map方法
- 直接使用对象的hashCode
hashCode 和 equal == 区别
== 就是判断值是否相等
equal是判断引用,判断对象是否相等
hashCode是对象的hash值
HashMap
只有在碰撞的时候hash值一样进行equal判断,如果相等则舍弃,如果不相等插入链表中
hash处理冲突有:链式(拉链)法和开放地址法