首页 > 试题广场 >

HashMap和Hashtable有什么区别?

[问答题]
请你说明HashMap和Hashtable的区别? 
aud头像 aud
  • HashTable 使用 synchronized 来进行同步,线程安全。
  • HashMap 可以插入键为 null 的 Entry。
  • HashMap 的迭代器是 fail-fast 迭代器。
  • HashMap 不能保证随着时间的推移 Map 中的元素次序是不变的。
发表于 2019-03-14 21:19:23 回复(0)
主要的区别有:线程安全性,同步(synchronization),以及速度。
  1. HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。
  2. HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
  3. 另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。
  4. 由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
  5. HashMap不能保证随着时间的推移Map中的元素次序是不变的。
发表于 2019-04-25 19:34:57 回复(1)
hashmap和hashtable都实现了map接口,前者是线程不安全,操作速度较快,后者线程安全,操作速度较慢。前者允许键值为空,后者不允许。前者迭代器为快速十八迭代器
发表于 2019-02-21 14:34:00 回复(0)
HashMap :非同步,速度快,key/value允许为null
Hashtable:同步  ,  速度慢,key/value不允许为null
发表于 2019-02-26 11:23:37 回复(0)
HashMap线程不安全允许null值null键
HashTable使用synchronized 来进行同步,线程安全,不允许null值null键
HashMap的操作速度比HashTable的操作速度快
发表于 2020-07-10 12:01:31 回复(0)
两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全。
发表于 2019-05-13 16:04:11 回复(0)
HashTable 使用 synchronized 来进行同步,线程安全。 HashMap 可以插入键为 null 的 Entry。 HashMap 的迭代器是 fail-fast 迭代器。 HashMap 不能保证随着时间的推移 Map 中的元素次序是不变的。
发表于 2019-04-30 19:08:22 回复(0)
haspmap允许键和值为null,hashtable不允许。 haspmap不是同步的,hashtable是同步的。 hashmap适合单线程,hashtable适合多线程
编辑于 2019-04-28 19:22:55 回复(0)
HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
发表于 2019-04-27 17:04:13 回复(0)
HashMap允许键和值是null,而Hashtable不允许键或者值是null。  Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。  HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。  一般认为Hashtable是一个遗留的类。
编辑于 2019-04-27 13:45:25 回复(0)
  • HashTable 使用 synchronized 来进行同步,线程安全。
  • HashMap 可以插入键为 null 的 Entry。
  • HashMap 的迭代器是 fail-fast 迭代器。
  • HashMap 不能保证随着时间的推移 Map 中的元素次序是不变的。
  • 发表于 2019-04-25 20:36:44 回复(0)