HashMap和Hashtable有什么不同呢?

戚薇 Java面经 发布时间:2023-06-28 17:15:34 阅读数:4725 1
下文笔者将列举HashMap和Hashtable的区别,如下所示

区别1:父类不同

HashMap 继承自 AbstractMap
Hashtable 继承自 Dictionary

线程安全性不同

HashMap 线程不安全
Hashtable 线程安全
   因为Hashtable中的方法是同步的(Synchronize)
   注意:同步的代价就是性能损失,非线程安全场景
    建议使用 HashMap

key、value 是否允许null?

HashMap 的 key 和 value 都可以为 null
        key 只允许一个 null;

Hashtable 的 key 和 value 都不能为 null

迭代器不同

HashMap 的 Iterator 是 fail-fast 迭代器

Hashtable 还是使用 enumerator 迭代器

什么是 fail-fast?

fail-fast 机制是 java 集合中的一种错误机制。
   当多个线程对同一个集合的内容进行操作时
       可能会产生 fail-fast 事件。例如:当某一个线程 A 通过 iterator 去遍历某集合的过程中,
	   若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出 
       ConcurrentModificationException 异常,产生 fail-fast 事件

hash 的计算方式不同

HashMap 计算了 hash 值;
    HashMap 中最核心的部分就是哈希函数,又称散列函数
       哈希函数是通过把 key 的 hash 值映射到数组中的一个位置来进行访问。

Hashtable 使用了 key 的 hashCode 方法;

默认初始大小和扩容方式不同

HashMap 默认初始大小 16,容量必须是 2 的整数次幂,
       扩容时将容量变为原来的2倍;

Hashtable 默认初始大小 11,
       扩容时将容量变为原来的 2 倍加 1

是否有 contains 方法?

HashMap 没有 contains 方法
       但添加containsValue() 和 containsKey() 方法;

Hashtable 包含contains方法,其功能类似于containsValue
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202306/16879437656924.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者