HashTable,HashMap,LinkedHashMap

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。