首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请你说说HashMap和Hashtable的区别
[问答题]
请你说说HashMap和Hashtable的区别
查看答案及解析
添加笔记
求解答(0)
邀请回答
收藏(164)
分享
纠错
36个回答
添加回答
32
你看起来很好吃0
1.Hashtable在实现Map接口时保证了线程安全性,而HashMap则是非线程安全的。所以Hashtable的性能不如HashMap,因为为了保证线程它牺牲了一些性能。 2.Hashtable不允许存入null,无论是以null作为key或value,都会引发异常但则HashMap是允许的。Hashtable是很古老的API,性能不好,不推荐使用,要在多线程下使用ConcurrrntHashMap,它不但保证了线程安全,也通过降低锁的粒度提高了并发访问时的性能
发表于 2022-05-08 10:48:48
回复(0)
9
牛客157506743号
1.两者的父类不同,HashMap的父类是AbstractMap类,HashTable的父类是Dictionary类 2.HashMap和HashTable都实现了Map,Serializable,Cloneable这三个接口 3.两者的线程安全性不同,HashMap是线程不安全的,在多线程并发的环境下会产生死锁的问题 HashTable是线程安全的,因为它底层的方法都有Synchronized修饰 虽然HashMap是线程不安全的,但是他的执行效率要比HashTable要高很多 在多线程并发的环境下推荐使用ConcurrentHashMap,因为它底层采用了分段锁,并不对整个进程进行绑定 4.对Null值的支持不同,HashMap允许Null Key 和Null Value,但是为了确保key的唯一性,只允许一个key为null,但是允许多个Value为Null 而HashTable Key和Value都不能为Null ,如果为Null的话会直接报空指针异常 5.HashMap在JDK1.7以前底层是基于数组加链表实现的,在1.7以后是采用数组加链表加红黑树实现的 6.HashMap初始容量大小为16,每次扩容为2n HashTable初始容量为11,每次扩容为2n+1
发表于 2022-05-22 15:37:50
回复(0)
8
牛客793464225号
1.HashMap非线程安全的,HashTable线程安全的 2.HashMap的底层数据结构为数组+链表/红黑树,HashTable,底层数据结构为数组+链表 3.HashMap的key和Value可以为null,而HashTable的key和value都不可以为null
发表于 2022-06-16 16:53:48
回复(0)
4
Chaos1874
Hashtable继承自Map接口,基本功能与Hashmap相似,并在次基础上保证了线程的安全性。但是降低了性能,所以性能:HashMap>HashTable。HashMap允许null作为键值对存入,Hashtable的key和value都不允许为null。hashtable是一个古老的接口虽然实现了多线程下的线程安全,但是效率很低,性能很不好。一般使用ConcurrentHashmap来替代hashtable,它通过降低封锁粒度到节点实现了较高效率的多线程安全。
发表于 2022-05-19 17:54:27
回复(0)
2
牛客395722046号
HashTable是线程安全的而HashMap是非线程安全的 HashTable不允许存入null,HashMap可以
编辑于 2022-06-21 13:52:48
回复(0)
2
卡农变骤
首先HashMap和Hashtable都是典型的Map实现,他们的区别在于是否线程安全和是否可以存入null值。 Hashtable它内部使用了大量的synchronized关键字来保证线程的安全,所以它的性能会稍差一些。还有就是Hashtable是不允许存入null值的,无论是作为key还是value,都会引发异常。 那么HashMap它是允许存入null值的,无论是key还是vlaue都可以,但是key只能有一个null值,value的话倒是无所谓。
发表于 2022-06-12 11:14:47
回复(0)
0
闲鱼JAVA
1、hashMap:线程不安全,可以有null值和null key,hashTable:线程安全,不可以有null值和null key 2、hashTable因为所有的方法都加了synchronized来实现线程安全,所以性能不太好,如果要保证线程安全安全的话可以考虑使用ConcurrentHashMap 3、两者的父类不同,HashMap的父类是AbstractMap类,HashTable的父类是Dictionary类
发表于 2024-05-09 11:16:26
回复(0)
0
Epoch__
HashMap非线程安全,而HashTable是线程安全的 所以性能会低一点,而且HashTable 不允许存入空值
发表于 2024-05-06 19:02:33
回复(0)
0
钟情于风TuT
线程安全: HashMap是线程不安全的,而HashTable是通过加锁的方式,线程安全的 默认容量:HashMap默认容量为16,而HashTable为11 允不允许Null值:HashMap运行Null,而HashTable不允许 数据结构: 1.8以后当HashMap元素超过阈值时会转化为红黑树,而HashTable不会
发表于 2024-04-01 20:05:52
回复(0)
0
Penalize
答: HashTable是线程安全的,HashMap线程不安全。并且在Java1.8之后,HashMap在元素个数超过阈值后会将链表转为红黑树,HashTable依旧是链表。HashMap允许存于唯一null值作为key,而HashTable不允许。 由于HashTable实现了线程安全,也就导致了其性能不行,并且不推荐使用。 在多线程下应使用ConcurrentHashMap,不但保证线程安全,也通过降低锁的粒度提高了并发访问的性能。
编辑于 2024-03-28 10:09:39
回复(0)
0
熬夜刷会题
HashMap和HashTable都是用与存储键值对的数据结构。 区别: 1. 线程安全:HashMap是非线程安全,如果在多线程环境下没有正确的的同步访问,那么会造成数据不一致。 HashTable是线程安全的,所有方法都是同步的,在多线程环境下可以安全地被多个线程访问,由于方法是同步的在高并发的情况下会性能下降。 2. 性能: 由于HashTable的线程是安全特性,在多线程的环境下可能会比HashMap性能差,因为需要同步操作需要时间, HashMap非同步,会有更好的性能。 3. 空键和空值: HashMap允许一个空键和多个空值,可以把一个null看成一个键和任意多个值存储在HashMap中。 HashTable 不允许键或值为 null,如果存储 会抛出异常 NullPointerException。 4. 继承父类: HashMap继承AbstractMap 类并实现Map接口。 HashTable继承Dictionary类, 也实现了Map接口,但是 Dictionary是一个抽象类,map是一个接口。
编辑于 2024-03-14 16:13:43
回复(0)
0
有礼貌的代码渣渣bbq了
编辑于 2024-03-07 17:27:54
回复(0)
0
牛客380258662号
父类不同 HashMap父类是AbstarctMap HashTable父类是Dictionary 线程安全性 不安全,性能高 安全,性能低 null值 允许 不允许 存储方式 数组+链表+红黑树 数组+链表 扩容机制 16 2n 11 2n+1
发表于 2024-02-29 10:48:54
回复(0)
0
求你们别卷了的小章鱼很有力量
区别:HashTable是线程安全的,但hashtable存取(开发中存取使用多)数据时速度很慢,被hashmap取代了。但hashtable的子类properties还是经常在用。
发表于 2023-11-11 16:47:50
回复(0)
0
求你们别卷了的小章鱼很有力量
区别:HashTable是线程安全的,但hashtable存取(开发中存取使用多)数据时速度很慢,被hashmap取代了。但hashtable的子类properties还是经常在用。
发表于 2023-11-11 16:47:50
回复(0)
0
javamer
1.前者不安全,后者安全 2前者底层数据结构 数组 链表 红黑树 后者数组 链表 3。前者性能高于后者 前者 key value都可以是null 后者不行
发表于 2023-10-31 20:57:52
回复(0)
0
神奇的打工人加油
1.HashTable是线程安全的,HashMap不是 2.数据结构不同,HashTable是数组+链表,1.8后的HashMap是数组加链表加红黑树 3.hash计算不同,HashTable是用本地修饰的HashCode值,HashMap是要经过二次hash 4.扩容方式不同,HashTable是当前容量翻倍+1,HashMap是当前容量翻倍 5.HashTable存储的数据不能为null,HashMap可以
发表于 2023-08-23 18:10:07
回复(1)
0
深情的三文鱼在写面经
Hash table是线程安全的哈希迈不是线程不安全的hash table。不能存入,那不管是key和value。但是还是map可以,如果你要保证线程安全的话,建议你使用。Current还是买搏击,保证了县城安全,又降低了。锁的力度,并保证了并发时的性能
发表于 2023-08-17 00:04:05
回复(0)
0
想家的鳄鱼
hashtable是线程安全的, hashmap允许key和value为null,默认初始容量为16,hashtable默认为11, hashmap以2的指数倍扩容,hashtable扩容为2的指数倍加1, HashMap的父类是AbstractMap类,HashTable的父类是Dictionary类, 在多线程并发的环境下推荐使用ConcurrentHashMap,因为它底层采用了分段锁,并不对整个进程进行绑定
发表于 2023-08-14 19:22:04
回复(0)
0
jdasji
hashtable是线程安全的,因此多线程情况下可以包证线程安全,但是因此hashtable的性能要比hashmap差,hashmap则不是线程安全的但性能更高,hashtabl不允许存入null值,hashmap则允许。单线程时通常使用hashmap,多线程则使用支持多并发的concurrenthashmap
发表于 2023-08-13 20:22:44
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Java
上传者:
real19931
难度:
36条回答
164收藏
1561浏览
热门推荐
相关试题
体育课测验(二)
广度优先搜索(BFS)
拓扑排序
dfs
评论
(2)
游戏内数据分析涉猎的少,如何证明自...
评论
(1)
之前的经历中单品数据分析的经验丰富...
评论
(1)
什么样的人适合做数据分析
评论
(1)
2022 诺瓦科技 Perl re...
perl
System Verilog
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题