首页 > 试题广场 >

有关hashMap跟hashtable的区别,说法正确的是?

[不定项选择题]
有关hashMap跟hashtable的区别,说法正确的是?
  • HashMap和Hashtable都实现了Map接口
  • HashMap是非synchronized,而Hashtable是synchronized
  • HashTable使用Enumeration,HashMap使用Iterator
  • HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

HashTable和HashMap区别

①继承不同。

public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map

Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。

Hashtable中,key和value都不允许出现null值。

在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

④两个遍历方式的内部实现上不同。

Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。 

编辑于 2021-04-12 15:36:56 回复(25)
BCD
人类的本质是复读机: 通俗的来讲,HashTableMap每有同步的关键字,那么就不是线程安全的嘛,Hashtable是线程安全的嘛。
HashTable使用了枚举,HashMap使用的是迭代器,而且HashMap允许将控制作为entry的
键和值。但是Hashtable是不允许的,因为他是线程安全的,如果为空值的话访问不到数据怎么办,就会抛出异常。
发表于 2021-05-12 17:48:22 回复(0)

A错,因为Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 。
B对,HashMap是非synchronized,而Hashtable是synchronized
C对,HashTable使用Enumeration,HashMap使用Iterator
D对,HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

发表于 2021-05-10 10:03:26 回复(1)
发表于 2019-08-08 13:58:05 回复(0)
c答案表达不清晰,hashtable也能用迭代器遍历😇
发表于 2018-10-26 12:13:15 回复(0)
这题不是在问区别么
发表于 2017-06-24 19:36:25 回复(0)
http://blog.csdn.net/jinchun1234/article/details/4315863 hashMap 与 table的区别

http://www.233.com/Java/zhuanye/20101126/103146177.html
发表于 2015-08-13 21:41:54 回复(0)
A的内容是对的,但是题目问的是区别,醉了
发表于 2021-09-15 11:52:41 回复(0)
题目:有关hashMap跟hashTable的区别,说法正确的是?
A HashMap和Hashtable都实现了Map接口

发表于 2018-06-23 08:43:49 回复(0)
A正确。Map是一个接口,hashtable,hashmap都是它的实现。
B正确。由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
C正确。 HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。
D正确。 哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
      int hash = key.hashCode();
      int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);
编辑于 2016-03-19 16:18:53 回复(5)
选ABCD,下面是直接总结的,有个地方写错了Hashtable的默认长度是11不是16。
发表于 2018-07-13 11:32:37 回复(6)

HashTable和HashMap的区别

1. 接口:HashTable和HashMap都是继承了Map接口

2. 同步:HashTable是线程安全synchronized,HashMap非线程安全

3. 哈希码:HashTable是直接使用元素的hashCode,HashMap需要重新计算

4. 迭代器:HashTable使用的是Enumerator和Iterator,HashMap使用的是Iterator

5. 空置:HashTable不接受空值或空键

6. 扩容:HashTable初始值为11,每次扩容变成原来的两倍加一,HashMap初始值为16,每次扩容变成原来的两倍

发表于 2019-04-14 15:42:28 回复(1)
Hashtable都没人用了,面试题却用了十几年
发表于 2018-04-25 08:45:14 回复(1)
C中
Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
发表于 2015-08-25 13:03:42 回复(0)
直接上文档比较好吧。
HashTable HashMap
编辑于 2015-11-03 13:51:55 回复(0)
HashTable和HashMap区别 ①继承不同。 public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map ② Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。 ③ Hashtable中,key和value都不允许出现null值。 在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。 ④两个遍历方式的内部实现上不同。 Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。 ⑤ 哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。 ⑥ Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。 
发表于 2016-04-22 01:53:37 回复(0)
C中Hashtable,不是HashTable,
发表于 2016-03-04 16:22:16 回复(0)
C错,HashTable既可以使用Enumeration,也可以用Iterator
发表于 2015-12-25 14:38:51 回复(0)
HashTable是线程安全的,HashMap是线程非安全的。
HashMap是HashTable的轻量级实现。
HashTable使用Enumeration,HashMap是使用Iterator。
hash值的使用不同,HashTable直接使用的对象的hashcode
发表于 2015-11-29 22:34:58 回复(0)
hashmap和hashtable都实现了map接口,但继承不同。 hashtable是同步的,hashmap方法不同步,多线程可直接使用hashtable,hashtable不允许key,value出现Null,但hashmap允许 hashtable用过Enumeratuon方式,都使用Iterator
发表于 2017-06-13 18:34:49 回复(0)