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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章