HashMap和HashTable的区别?(面试)

HashMap和HashTable都是Java中的Map实现,两者存在版本差异,HashMap出现在Java1.2,HashTable在1.0。初始化时,HashTable会创建数组,HashMap则在首次添加时创建。默认容量不同,HashTable是11,HashMap是16。线程安全性方面,HashTable是同步的,HashMap不是。扩容策略也不同,HashTable扩展为2倍+1,HashMap扩展为2倍。最大容量和对null的处理也有所区别,HashTable不允许null,HashMap允许。此外,HashMap在Java8后引入了红黑树优化。
摘要由CSDN通过智能技术生成
  • 第一种回答方式:直接说两个容器的特点。
  1.   HashMap和HashTable都是Map接口的实现类,都是存储键值对的值。 只是HashTable是Java1.0就出现的。实例化对象时默认就创建长度11的数组。里面方法都是使用synchronized修饰的。每次扩容2倍+1,最大上限Integer最大值减8。
  2.   Hash冲突只有链表。如果新增时key或value为null都会出现空指针异常。而HashMap是Java 1.2才出现的。
  3.   从Java8开始,实例化时不会创建底层数据,在新增时在创建。所有方法都是非线程安全的。数组容量尽量保持是2的N次方法。初始默认大小16。最大上限2的30次方。如果新增时key和value都允许为null。
  • 第二种回答方式:提取出区别,在说针对这点两个容器的区别进行解释
  •   HashMap和HashTable都是Map接口的实现类,都是存储键值对的值。主要区别包含这样的几点:
  1.   第一点:出现的版本不同:HashTable是JDK 1.0就出现的,HashMap是JDK 1.2出现的。
  2.   第二点:实例化时是否创建底层数组:HashTable 实例化时就会创建底层数组,HashMap只有在第一次新增时才会实例化底层数组。
  3.   第三点:底层数组初始容量不同:HashTable底层数组默认初始容量为11,HashMap底层数组默认初始容量为16.
  4.   第四点:是否是线程安全的:HashTable中get、remove、put都是用synchronized进行修饰。而HashMap没有使用synchronized修饰
  5.   第五点:扩容后大小不同:HashTable每次扩容2倍+1,而HashMap每次扩容2倍;
  6.   第六点:最大大小不同。HashTable底层数组最大大小int最大值减8,而HashMap最大容量为2的30次方。
  7.   第七点:底层结构不同。HashTable是数组+链表。HashMap是数组+链表+红黑树。
  8.   第八点:是否允许为null。HashTable中key和vlaue都不允许为null,为null时出现空指针异常。HashMap中key和value都允许为null。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2023七月顺利工作

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值