DESKTOP-FKKMCTR_20200911-张森

所遇问题

1.HashMap 和 Hashtable 的区别?

解决问题

相同

  • 两者都实现 Map 接口,用于存放 键-值对
  • 内部都采用 哈希表 实现,都采用 哈希算法计算键-值对的存放位置

    区别

  • 是否支持线程安全

    • HashMap 非线程安全,理论上效率较高
    • Hashtable 线程安全,理论上效率较低
  • 内部实现不同

    • 从 JDK 1.8 ( Java 8 ) 开始,HashMap 内部采用 数组 + 链表 + 红黑树 方式存储
    • 当链表长度大于8时会自动转换成红黑树
    • 当链表长度小于6时,红黑树重新转换成链表
    • 而 Hashtable 内部则采用 数组 + 链表 实现
  • 对元素位置的计算方法不同

    • HashMap 内部采用一个单独的方法根据 key.hashCode() 重新计算一个哈希值后再确定元素存放位置
    • Hashtable 内部直接采用 key.hashCode() 来确定元素存放位置
  • 两者所继承的类不同

    • HashMap 类继承 AbstraceMap 类
    • Hashtable 类继承 Dictionary 类
  • 是否支持 null

    • HashMap 支持 null 键 和 null 值
    • Hashtable 不支持 null 键 和 null 值

吐槽

今晚整理集合的时候感觉好乱好乱,好多东西都混了,周末把这些全部整理出来。