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

题目

(多选)有关hashMap跟hashTable的区别,说法正确的是?

A. HashMap和Hashtable都实现了Map接口
B. HashMap是非synchronized,而Hashtable是synchronized
C. HashTable使用Enumeration,HashMap使用Iterator
D. HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

答案

A B C D

解析

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);

发布了72 篇原创文章 · 获赞 81 · 访问量 7423

猜你喜欢

转载自blog.csdn.net/weixin_43332735/article/details/105302577
今日推荐