HashTable
- 常用的变更方法都有sync修饰,是线程安全的
- 原生hashCode % size的方式计算index
- resize方法性能一般
- 应该不再维护了
- 初始化cap=11
- 强制校验value不能为null
HashMap
- 常用方法没有加锁,线程不安全
- hashCode方法的优化,高位移动到低位,以进一步散列
- haseCode & (size-1)的方式计算index
- resize方法比较有意思,
-
当一个Entry链表长度超过8时,转红黑树,以提高查询效率
resize过程
TreeMap
- 对key使用指定的比较器进行排序
LinkedHashTable
- Entry相对于HashTable,新增了双向链表
- 双向链表维护写入顺序或者访问顺序,accessOrder来控制
- get方法并没有实现LRU,contain方法和迭代器访问双向链表,可以提速
共同点
- 负载因子
- 扩容时,可能大部分结点都比较空,负载并不一定高
- key有上限,hashCode时int类型
- 变更操作使用mdCount,实现fast-fail
网友评论