千家信息网

HashMap 和 HashTable 有什么区别

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,HashMap 和 HashTable 有什么区别,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、线程是否安全:HashMap 是非线
千家信息网最后更新 2026年10月31日HashMap 和 HashTable 有什么区别

HashMap 和 HashTable 有什么区别,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1、线程是否安全:
HashMap 是非线程安全的,HashTable 是线程安全的; HashTable 内部的方法基本都经过 synchronized 修饰。 (如果你要保证线程安全的话就使用 ConcurrentHashMap 吧! );
2、效率:
因为线程安全的问题,HashMap 要比 HashTable 效率高一点。 另外,HashTable 基本被淘汰,不要在代码中使用它;
3、对Null key 和Null value的支持:
HashMap 中,null 可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为 null。 。 但是在 HashTable 中 put 进的键值只要有一个 null,直接抛出 NullPointerException。

4、初始容量大小和每次扩充容量大小的不同 :
①创建时如果不指定容量初始值,Hashtable 默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。 HashMap 默认的初始化大小为16。 之后每次扩充,容量变为原来的2倍。
②创建时如果给定了容量初始值,那么 Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为2的幂次方大小(HashMap 中的 tableSizeFor() 方法保证,下面给出了源代码)。 也就是说 HashMap 总是使用2的幂作为哈希表的大小,后面会介绍到为什么是2的幂次方。
5、底层数据结构:
JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。 Hashtable 没有这样的机制。
HashMap 中带有初始容量的构造函数:
public HashMap(int initialCapacity, float loadFactor) {    if (initialCapacity < 0)        throw new IllegalArgumentException("Illegal initial capacity: " +                                           initialCapacity);    if (initialCapacity > MAXIMUM_CAPACITY)        initialCapacity = MAXIMUM_CAPACITY;    if (loadFactor <= 0 || Float.isNaN(loadFactor))        throw new IllegalArgumentException("Illegal load factor: " +                                           loadFactor);    this.loadFactor = loadFactor;    this.threshold = tableSizeFor(initialCapacity);}public HashMap(int initialCapacity) {    this(initialCapacity, DEFAULT_LOAD_FACTOR);}

下面这个方法保证了 HashMap 总是使用2的幂作为哈希表的大小。

/*** Returns a power of two size for the given target capacity.*/static final int tableSizeFor(int cap) {    int n = cap - 1;    n |= n >>> 1;    n |= n >>> 2;    n |= n >>> 4;    n |= n >>> 8;    n |= n >>> 16;    return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;}

看完上述内容,你们掌握HashMap 和 HashTable 有什么区别的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

大小 容量 安全 方法 线程 问题 哈希 保证 内容 效率 更多 不同 较大 束手无策 为此 也就是 也就是说 代码 函数 原因 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技和互联网公司 科技创新与互联网经济 互联网科技公司电话 互联网科技视频素材 现代科技和互联网有关系吗 承德科技产业互联网发展 宝灵互联网科技有限公司 宜昌元轩互联网科技有限公司 呼和浩特新华互联网科技学院 国大互联网教育科技有限公司工作 乌苏新华互联网科技做什么的 互联网新科技动漫ppt素材 翼展科技 首家互联网医院 玉溪新华互联网科技好不好 山东有哪些互联网科技公司 国大互联网教育科技有限公司薪资 南通创西澳互联网科技有限公司 广州百诚互联网科技有限公司官网 北京瑞云互联网科技有限公司 银川新华互联网科技学校招聘 互联网科技有限公司 河南云网互联网络科技有限公司 互联网科技官网 互联网最新的科技 郑州华宇互联网科技 亳州好赞互联网科技有限公司 互联网科技融合创新 郑州欣桑互联网科技有限公司 艺电能源互联网科技有限公司招聘 黑龙江互联网科技公司
0