代码先锋网 代码片段及技术文章聚合

HashMap和Hashtable

首先Hashtable是jdk1.0版本加入的,命名规则上有点冲突

HashMap和Hashtable的区别

一:线程安全
Hashtable 是线程安全的,HashMap 不是线程安全的。

为什么说 HashTable 是线程安全的?

来看下 Hashtable 的源码,Hashtable 所有的元素操作如put-get等都是 synchronized 修饰的,而 HashMap 并没有

public synchronized V put(K key, V value);
public synchronized V get(Object key);
...

二:性能优劣
有利就会有弊,既然 Hashtable 是线程安全的,每个方法都要阻塞其他线程,所以 Hashtable 性能较差,HashMap 性能较好,使用更广。

如果要线程安全又要保证性能,建议使用 JUC 包下的 ConcurrentHashMap

三、键值是否可以为空
Hashtable 是不允许键或值为 null 的,HashMap 的键值则都可以为 null。
Hashtable key 为 null 会直接抛出空指针异常,value 为 null 手动抛出空指针异常,而 HashMap 的逻辑对 null 作了特殊处理
四、继承的类不同
两者继承的类不一样,Hashtable 继承了 Dictionary类,而 HashMap 继承的是 AbstractMap 类
五、容量扩容
两者继承的类不一样,Hashtable 继承了 Dictionary类,而 HashMap 继承的是 AbstractMap 类
六、迭代器
HashMap 中的 Iterator 迭代器是 fail-fast 的,而 Hashtable 的 Enumerator 不是 fail-fast 的
当其他线程改变了HashMap 的结构,如:增加、删除元素,将会抛出 ConcurrentModificationException 异常,而 Hashtable 则不会

版权声明:本文为qq_40551994原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40551994/article/details/100996600

智能推荐

HashMap和Hashtable

首先Hashtable是jdk1.0版本加入的,命名规则上有点冲突 HashMap和Hashtable的区别 一:线程安全 Hashtable 是线程安全的,HashMap 不是线程安全的。 为什么说 HashTable 是线程安全的? 来看下 Hashtable 的源码,Hashtable 所有的元素操作如put-get等都是 synchronized 修饰的,而 HashMap 并没有 二:性...

HashMap和HashTable

相同: 都保存映射关系数据,即键值对。 HashTable 键值对结构: HashMap 键值对结构: 保存键值对的数据都继承于 Map.Entry<K,V>接口 都使用拉链法扩展 不同: HashMap 中 null 可以作为 key,并且会计算散列码,HashTable 中 null 不能作为 key HashMap中(1.8之后)桶中元素达到阀值会转为树来存放。 HashMap ...

HashMap和HashTable

HashMap和HashTable的区别 线程是否安全 实现方式 key值是否可为null 存储的位置 底层实现 一、线程安全性 两者的最主要的区别就是体现在线程的安全性上。 HashMap是线程不安全的,HashTable是线程安全的,因为HashTable的实现方法里都添加了synchronized关键字来确保线程同步。所以HashMap的运行效率要高一些。平时如果无特殊需求建议使用HashM...

HashMap和Hashtable区别

区别 1、线程区别 首先看HashMap的源码在添加时的处理 其次看Hashtable的源码在添加时的处理 后者在操作时添加了synchronized保证了线程安全,Hashtable数据操作的时候都会上锁,所以效率比较低下。 2、为什么HashMap可以添加空key,而Hashtable不行呢? HashMap在添加空key的时候做了特殊处理,如果key的null的话就等于0 Hashtable...

java Hashmap 和 HashTable

关于HashMap你需要了解的: 相关面试题 1. 下面有关java hashmap的说法错误的是?( ) 2. 关于HashMap与HashTable,以下说法错误的是 ( ) 3. 有关hashMap跟hashTable的区别,说法正确的是?( ) 4. HashMap和HashTable的描述,错误的是? 5. 在Java中,关于HashMap类的描述,以下错误的是()? 支持我的话可以关注...

猜你喜欢

Hashtable和HashMap比较

Hashtable和HashMap比较 标签: java8源码 欢迎 start 由于 Hashtable 不建议使用. 用到 Hashtable 的地方 应该用 ConcurrentHashMap 来代替,所以下面仅介绍 Hashtable 的特性和与HashMap 的 区别. 相同点: 不同点: 不同点 HashMap Hashtable 数据结构 数组+链表+红黑树 数组+链表 继承的类不同...

HashTable和HashMap比较

HashTable源码 HashTable源码定义 这个类实现了一个哈希表,它将键映射到值。任何非空对象都可以用作键或值。 HashMap源码 HashMap源码定义 基于哈希表的映射接口实现。该实现提供了所有可选的映射操作,并允许null值和null键。(HashMap类大致相当于Hashtable,除了它是不同步的,并且允许null) 注:java中两种数据存储方式: 数组 查询速度快,增删较...

HashTable和HashMap区别

1、继承 2、HashTable是线程同步的,HashMap则不是 3、HashTable中的key和value都不允许为null,HashMap允许有一个key为null,多个value为null 4、两者遍历方式内部实现不同,两者都用了迭代器Iterator,由于历史原因,HashTable还是用了枚举Enumeration的方式 5、HashTable直接使用HashCode,而HashMa...

HashMap和HashTable

关于这个问题真的是老生常谈,面试题基本上必考,那么就来通过源码理解下两者的异同。 HashMap HashTable HashTable如何实现线程安全呢? 让大家失望了,HashTable源码中找不到带有“Thread”的线程,它只是将每个方法声明成了synchronized 来保证线程同步,个人觉得HashTable=HashMap+synchronized 。 最核心...

[蓝桥杯][2013年第四届真题]买不到的数目

题目描述 小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。 小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。 你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。 本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。 输入 两个正整数,表示每...