DESKTOP-86ONKLH_20200911-刘天阳

1、问题

HashMap 和 Hashtable 的区别

相同

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

区别

  • 是否支持线程安全

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

    • 从 JDK 1.8 ( Java 8 ) 开始,HashMap 内部采用 数组 + 链表 + 红黑树 方式存储
    • 而 Hashtable 内部则采用 数组 + 链表 实现
  • 对元素位置的计算方法不同

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

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

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

2、吐槽

考试!考试!考试!

标签

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1