首页 > 试题广场 >

请你说说HashMap和Hashtable的区别

[问答题]
请你说说HashMap和Hashtable的区别
1.Hashtable在实现Map接口时保证了线程安全性,而HashMap则是非线程安全的。所以Hashtable的性能不如HashMap,因为为了保证线程它牺牲了一些性能。 2.Hashtable不允许存入null,无论是以null作为key或value,都会引发异常但则HashMap是允许的。Hashtable是很古老的API,性能不好,不推荐使用,要在多线程下使用ConcurrrntHashMap,它不但保证了线程安全,也通过降低锁的粒度提高了并发访问时的性能
发表于 2022-05-08 10:48:48 回复(0)
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)
1.HashMap非线程安全的,HashTable线程安全的 2.HashMap的底层数据结构为数组+链表/红黑树,HashTable,底层数据结构为数组+链表 3.HashMap的key和Value可以为null,而HashTable的key和value都不可以为null
发表于 2022-06-16 16:53:48 回复(0)
Hashtable继承自Map接口,基本功能与Hashmap相似,并在次基础上保证了线程的安全性。但是降低了性能,所以性能:HashMap>HashTable。HashMap允许null作为键值对存入,Hashtable的key和value都不允许为null。hashtable是一个古老的接口虽然实现了多线程下的线程安全,但是效率很低,性能很不好。一般使用ConcurrentHashmap来替代hashtable,它通过降低封锁粒度到节点实现了较高效率的多线程安全。
发表于 2022-05-19 17:54:27 回复(0)
HashTable是线程安全的而HashMap是非线程安全的 HashTable不允许存入null,HashMap可以
编辑于 2022-06-21 13:52:48 回复(0)
首先HashMap和Hashtable都是典型的Map实现,他们的区别在于是否线程安全和是否可以存入null值。 Hashtable它内部使用了大量的synchronized关键字来保证线程的安全,所以它的性能会稍差一些。还有就是Hashtable是不允许存入null值的,无论是作为key还是value,都会引发异常。 那么HashMap它是允许存入null值的,无论是key还是vlaue都可以,但是key只能有一个null值,value的话倒是无所谓。
发表于 2022-06-12 11:14:47 回复(0)
线程安全: HashMap是线程不安全的,而HashTable是通过加锁的方式,线程安全的 默认容量:HashMap默认容量为16,而HashTable为11 允不允许Null值:HashMap运行Null,而HashTable不允许 数据结构: 1.8以后当HashMap元素超过阈值时会转化为红黑树,而HashTable不会
发表于 2024-04-01 20:05:52 回复(0)
答: HashTable是线程安全的,HashMap线程不安全。并且在Java1.8之后,HashMap在元素个数超过阈值后会将链表转为红黑树,HashTable依旧是链表。HashMap允许存于唯一null值作为key,而HashTable不允许。 由于HashTable实现了线程安全,也就导致了其性能不行,并且不推荐使用。 在多线程下应使用ConcurrentHashMap,不但保证线程安全,也通过降低锁的粒度提高了并发访问的性能。
编辑于 2024-03-28 10:09:39 回复(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)
编辑于 2024-03-07 17:27:54 回复(0)
父类不同 HashMap父类是AbstarctMap HashTable父类是Dictionary 线程安全性 不安全,性能高 安全,性能低 null值 允许 不允许 存储方式 数组+链表+红黑树 数组+链表 扩容机制 16 2n 11 2n+1
发表于 2024-02-29 10:48:54 回复(0)
区别:HashTable是线程安全的,但hashtable存取(开发中存取使用多)数据时速度很慢,被hashmap取代了。但hashtable的子类properties还是经常在用。
发表于 2023-11-11 16:47:50 回复(0)
区别:HashTable是线程安全的,但hashtable存取(开发中存取使用多)数据时速度很慢,被hashmap取代了。但hashtable的子类properties还是经常在用。
发表于 2023-11-11 16:47:50 回复(0)
1.前者不安全,后者安全 2前者底层数据结构 数组 链表 红黑树 后者数组 链表 3。前者性能高于后者 前者 key value都可以是null 后者不行
发表于 2023-10-31 20:57:52 回复(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)
Hash table是线程安全的哈希迈不是线程不安全的hash table。不能存入,那不管是key和value。但是还是map可以,如果你要保证线程安全的话,建议你使用。Current还是买搏击,保证了县城安全,又降低了。锁的力度,并保证了并发时的性能
发表于 2023-08-17 00:04:05 回复(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)
hashtable是线程安全的,因此多线程情况下可以包证线程安全,但是因此hashtable的性能要比hashmap差,hashmap则不是线程安全的但性能更高,hashtabl不允许存入null值,hashmap则允许。单线程时通常使用hashmap,多线程则使用支持多并发的concurrenthashmap
发表于 2023-08-13 20:22:44 回复(0)
最主要的区别是HashTable的方法都使用了synchronized修饰,是线程安全的,HashMap的方法是非线程安全的 HashMap的key和value都可以为null,HashTable的key和value都不能为null hashtable容量默认是11,扩容时是2n + 1(<<1+1),hashmap容量1.7默认是16,1.8默认是0,只有添加元素的时候才会初始化容量,扩容是2倍扩容 hashtable底层是数组+链表,hashmap1.8底层是数组+链表+红黑树
发表于 2023-08-05 13:24:01 回复(0)
1.是否是线程安全的; 2.效率; 3.初始容量和扩充容量大小,有分为指定初始容量大小和不指定初始容量大小两种情况; 4.底层数据结构; 5.对NULL key和NULL value的支持。
发表于 2023-07-13 11:11:48 回复(0)