1.HashMap 和 ConcurrentHashMap 的區別
- ConcurrentHashMap對整個桶數組進行了分割分段(Segment),然後在每一個分段上都用lock鎖進行保護,相對於HashTable的synchronized鎖的粒度更精細了一些,併發性能更好,而HashMap沒有鎖機制,不是線程安全的。(JDK1.8之後ConcurrentHashMap啓用了一種全新的方式實現,利用CAS算法。)
- HashMap的鍵值對允許有null,但是ConCurrentHashMap都不允許。
2.List,Set,Map三者的區別及總結
- List:對付順序的好幫手
List接口存儲一組不唯一(可以有多個元素引用相同的對象),有序的對象
- Set:注重獨一無二的性質
不允許重複的集合。不會有多個元素引用相同的對象。
- Map:用Key來搜索的專家
使用鍵值對存儲。Map會維護與Key有關聯的值。兩個Key可以引用相同的對象,但Key不能重複,典型的Key是String類型,但也可以是任何對象。
3.HashMap 和 Hashtable 的區別
- HashMap是非線程安全的,HashTable是線程安全的;HashTable內部的方法基本都經過synchronized修飾。
- 因爲線程安全的問題,HashMap要比HashTable效率高一點,HashTable基本被淘汰。
- HashMap允許有null值的存在,而在HashTable中put進的鍵值只要有一個null,直接拋出NullPointerException。
Hashtable和HashMap有幾個主要的不同:線程安全以及速度。僅在你需要完全的線程安全的時候使用Hashtable,而如果你使用Java5或以上的話,請使用ConcurrentHashMap