Java中的集合特點總結
分類標準:
1)執行緒是否安全(單執行緒還是多執行緒中使用)?
2)單列還是雙列集合?
3)底層結構是連結串列、陣列還是雜湊表?
4))是否是有序集合?
繼承關係:
Collection<--List<--Vector、ArrayList、LinkedList
Collection<--Set<--HashSet<--LinkedHashSet
Vector : 基於Array的List,實際上就是封裝了Array所不具備的一些功能方便我們使用,它不可能不受Array的限制。效能也就不可能超越Array。所以,在可能的情況下,我們要多運用Array(執行緒安全的集合,與
ArrayList:執行緒不安全的集合,所以在效能上要比Vector優越一些,但是當執行到多執行緒環境中時,可需要自己在管理執行緒的同步問題(需要自己處理)。
LinkedList:它不是基於Array的,所以不受Array效能的限制。它每一個節點(Node)都包含兩方面的內容:1.節點本身的資料(data);2.下一個節點的資訊(nextNode)。所以當對LinkedList做新增,刪除動作的時候就不用像基於Array的List一樣,必須進行大量的資料移動。只要更改nextNode的相關資訊就可以實現了。這就是LinkedList的優勢。
List總結(單列集合):
1. 所有的List中只能容納單個不同型別的物件組成的表,而不是Key-Value鍵值對。例如:[ tom,1,c ];
2. 所有的List中可以有相同的元素,例如Vector中可以有[ tom,koo,too,koo ];
3. 所有的List中可以有null元素,例如[ tom,null,1 ];
4. 基於Array的List(Vector,ArrayList)適合查詢,通過索引進行遍歷,而LinkedList(連結串列)適合新增,刪除操作。
HashSet:雖然Set同List都實現了Collection介面,但是實現方式卻大不一樣。List基本上都是以Array為基礎。但是
在Set中不能像在List中一樣有重複的項的根本原因,因為HashMap的key是不能有重複的。
Set總結:
1. Set實現的基礎是Map(HashMap);
2. Set中的元素是不能重複的,如果使用add(Object obj)方法新增已經存在的物件,則會覆蓋前面的物件
Map集合
HashTable: 實現一個映象,所有的鍵必須非空。為了能高效的工作,定義鍵的類必須實現hashcode()方法和equal()方法。這個類是前面java實現的一個繼承,並且通常能在實現映象的其他類中更好的使用。 執行緒安全的集合
HashMap: 實現一個映象,允許儲存空物件,而且允許鍵是空(由於鍵必須是唯一的,當然只能有一個)。(允許空鍵存在),執行緒不安全的集合。
幾個面試常見問題:
1.ArrayList和Vector有什麼區別?HashMap和HashTable有什麼區別?
A:Vector和HashTable是執行緒同步的(synchronized)。效能上,ArrayList和HashMap分別比Vector和Hashtable要好。
2.大致講解java集合的體系結構
List、Set、Map是這個集合體系中最主要的三個介面。
其中List和Set繼承自Collection介面。
Set不允許元素重複。HashSet和TreeSet是兩個主要的實現類。
List有序且允許元素重複。ArrayList、LinkedList和Vector是三個主要的實現類。
Map也屬於集合系統,但和Collection介面不同。Map是key對value的對映集合,其中key列就是一個集合。key不能重複,但是value可以重複。HashMap、TreeMap和Hashtable是三個主要的實現類。
基於Array的List(Vector,ArrayList)適合查詢,而LinkedList(連結串列)適合新增,刪除操作。
3.Collection 和 Collections的區別
Collection是集合類的上級介面,繼承與他的介面主要有Set和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜尋、排序、執行緒安全化等操作
List、Map、Set三個介面,存取元素時,各有什麼特點
List 以特定次序來持有元素,可有重複元素;
Set 無法擁有重複元素,內部排序(無序);
Map 儲存key-value值,value可多值。