區(qū)別
- Hashmap的key和value是允許為null的,而Hashtable不行
- HashMap是非synchronized润讥,而Hashtable是synchronized转锈,這意味著Hashtable是線程安全的,多個(gè)線程可以共享一個(gè)Hashtable象对;而如果沒有正確的同步的話黑忱,多個(gè)線程是不能共享HashMap的宴抚。Java 5提供了ConcurrentHashMap勒魔,它是HashTable的替代,比HashTable的擴(kuò)展性更好菇曲。
- Hashmap的迭代器(Iterator)是fail-fast迭代器冠绢,Hashtable不是。這意味這當(dāng)改變了Hashmap的結(jié)構(gòu)(添加或刪除了元素)常潮,會(huì)報(bào)異常弟胀,而用方法remove()方法則不會(huì)。(ConcurrentModificationException)
- Hashmap在單線程中比Hashtable快喊式,因?yàn)楹笳呤莝ynchoronized并且線程安全的孵户。
- HashMap不能保證隨著時(shí)間的推移Map中的元素次序是不變的。(沒碰到過(guò)岔留,先記下了)
另:
- sychronized意味著在一次僅有一個(gè)線程能夠更改Hashtable夏哭。就是說(shuō)任何線程要更新Hashtable時(shí)要首先獲得同步鎖,其它線程要等到同步鎖被釋放之后才能再次獲得同步鎖更新Hashtable献联。
2.結(jié)構(gòu)上的更改指的是刪除或者插入一個(gè)元素竖配,這樣會(huì)影響到map的結(jié)構(gòu)。