
1. 說說常見的集合有哪些吧?
? ? 答:Map 接口和Collection接口是所有集合框架的父接口
? ? 1. Collection接口的子接口包括:Set接口和List接口
? ? 2. Map 接口的實現(xiàn)類主要有:HashMap、TreeMap、HashTable、ConcurrentHashMap 以及Properties等
? ? 3. Set接口的實現(xiàn)類主要有:HashMap TreeSet LinkedHashSet等
? ? 4.List接口的實現(xiàn)類主要有:ArrayList、LinkedList、Stack 以及Vector等
2. HashMap 與HashTable的區(qū)別?
? ? 1. HashMap沒有考慮同步,是線程不安全的;Hashtable使用了synchronized關鍵字 是線程安全的;
? ? 2.HashMap允許K/V都是null,后者K/V都不允許為null;
? ? 3. HashMap繼承自AbstractMap類;而Hashtable繼承自Dictionary類
3. ArrayList 和 Vector 區(qū)別?
? ? ? ? ?1) 同步性:Vector是線程安全的(同步的),而ArrayList是線程不安全的;
? ? ? ? ? 2)數(shù)據(jù)增長:當需要增長時,Vector默認增長一倍,而ArrayList卻是一半。
4. List? ?Map? Set 三個接口,存取元素時,各有什么特點?
? ? ? ? List以特點次序來持有元素時,可有重復元素,Set無法擁有重復元素,每部排序。Map保存key-value值,value可多值。
5. set 里的元素不能重復。那么用什么方法來區(qū)分重復與否呢?
? ? ? ? Set里元素是不能重復的,用equals() 方法區(qū)分重復與否。覆蓋equals() 方法用來判斷對象的內(nèi)容是否相同,而"==" 來判斷地址是否相等,用來確定引用值是否是同一對象。
6. HashMap 和 Hashtale的區(qū)別?
? ? ? ? 二者都實現(xiàn)Map接口,是將唯一鍵映射到特點的值上,主要區(qū)別與:
?1. HashMap沒有排序,允許一個null鍵和和多個null值,而HashMap不允許。
?2. HashMap把HashMap的contains方法去掉了,改成containvalue和containKey,因為contains方法容易讓人引起誤解。
3. Hashtable繼承自Dictonary類,HashMap是java1.2引進的Map接口的實現(xiàn)。
4. Hashtable的方法是同步的,而HashMap不是,在多個線程訪問Hashtable時,不需要為它的方法實現(xiàn)同步,而HashMap就必須為之提供外同步,
7. Collection 和 Collections的區(qū)別
? ? Collection是java.uitl 下的接口,他是各種集合的父接口,繼承于它的接口主要有set 和list;Conllecitons是個java.util下的類,是針對集合的幫助類,提供一系列靜態(tài)方法對各種集合的搜索,排序,線程安全化等操作。
線程安全的map
1. synchronizedMap
? ? ? ? 這種是直接使用工具類里面的方法創(chuàng)建SynchronizedMap, 把傳入進行的HashMap對象進行了包裝同步而已,看出SynchronizedMap的實現(xiàn)方式是加了對象鎖,每次對HashMap的操作,都要先獲取mutex的對象鎖才能進入,所以性能也不會比HashTable好到那里去,也不建議使用。
2. ConcurrentHashMap
這個也是最推薦使用的線程安全的Map,也是實現(xiàn)方式最復雜的一個集合,每個版本的實現(xiàn)方式也不一樣,在jdk8之前是使用分段加鎖的一個方式,分成16個桶。每次只加鎖其中一個桶,而在jdk8之后又加入了紅黑樹和CAS算法來實現(xiàn)
原文鏈接?java集合必會14問
8. 遍歷List
```
```