java架构师培训: HashMap和Hashtable有什么不同

线程安全
  两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全。
  已将synced关键字添加到Hashtable的实现方法中,以确保线程同步。因此,HashMap的性能相对较高。如果我们通常使用它,如果没有特殊要求,建议使用HashMap。如果在多线程环境中使用HashMap,则需要使用Collections.syncedMap()方法以获得线程安全的集合。
  java架构师培训: HashMap和Hashtable有什么不同

注:Collections.synchronizedMap()实现原理是Collections定义了SynchronizedMap的内部类。此类实现Map接口,并在调用方法时使用synced确保线程同步。当然,实际的操作是我们传入的HashMap实例,简称为Collections。syncedMap()方法可帮助我们在操作HashMap时自动添加同步,以实现线程同步。类似的原理也适用于其他Collections.synchronizedXX方法。
  针对null的不同
  HashMap可以使用null作为key,而Hashtable则不允许null作为key。但是建议还是尽量避免这样使用,因为一旦不小心使用了,若因此引发一些问题,排查起来很是费事。
  注:HashMap以null作为key时,总是存储在table数组的第一个节点上。
  继承结构
  HashMap是对Map接口的实现,HashTable实现了Map接口和Dictionary抽象类。
  初始容量与扩容
  HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75。
  HashMap扩容时是当前容量翻倍,即:capacity2,Hashtable扩容时是容量翻倍+1,即:capacity2+1。
  两者计算hash的方法不同
  Hashtable计算hash是直接使用key的hashcode对table数组的长度直接进行取模。
   HashMap和Hashtable有什么不同

HashMap计算hash是对key的hashcode进行了二次hash,以获得更好的散列值,然后对table数组长度取模。
   HashMap和Hashtable有什么不同
推荐阅读:jvm培训:如何判断哪些对象需要回收?
 如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1037935907,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值