• HashMap 与 HashTable 区别


    HashMap

    • HashMap是一个基于 hash 表实现的 K-V 结构的集合。
    • HashMap 是 JDK1.2 引入的一个线程不安全的集合类。
    • HashMap 内部是采用了数组加链表实现,在 JDK1.8 版本里面做了优化,引入了红黑树。当链表长度大于等于 8 并且数组长度大于 64 的时候,就会把链表转化为红黑树,提升数据查找性能。

    HashTable

    • Hashtable是一个基于 hash 表实现的 K-V 结构的集合。
    • Hashtable 是 JDK1.0 引入的一个线程安全的集合类,因为所有数据访问的方法都加了一个 Synchronized 同步锁。
    • Hashtable 内部采用数组加链表来实现,链表用来解决 hash 冲突的问题。

    HashMap 与 HashTable 区别

    从功能特性的角度来说:
    • HashTable 是线程安全的,而 HashMap 不是。
    • HashMap 的性能要比 HashTable 更好,因为,HashTable 采用了全局同步锁来保证安全性,对性能影响较大

    从内部实现的角度来说:

    • HashTable 使用数组加链表、HashMap 采用了数组+链表+红黑树
    • HashMap 初始容量是 16、HashTable 初始容量是 11
    • HashMap 可以使用 null 作为 key,HashMap 会把 null 转化为 0 进行存储, 而 Hashtable 不允许。 
    最后,他们两个的 key 的散列算法不同,HashTable 直接是使用 key 的 hashcode 对数组长度做取模。而 HashMap 对 key 的 hashcode 做了二次散列,从而避免 key 的分布不均匀问题影响到查询性能。
  • 相关阅读:
    LeetCode - 79 单词搜索
    JavaScript入门
    不知道不 OK!53 个 Python 经典面试题详解
    Python 中的方法重载
    12-使用vue2实现todolist待办事项
    使用 shell 脚本自动申请进京证 (六环外) —— debug 过程
    分布式系统中的领导选举
    接口自动化测试用例编写规范
    java并发-锁
    C++11异步操作future和aysnc 、function和bind
  • 原文地址:https://blog.csdn.net/qq_63431773/article/details/133828410