1. 程式人生 > >Java中的集合特點總結

Java中的集合特點總結

分類標準:

1)執行緒是否安全(單執行緒還是多執行緒中使用)?

2)單列還是雙列集合?

3)底層結構是連結串列、陣列還是雜湊表?

4))是否是有序集合?

繼承關係:

Collection<--List<--VectorArrayListLinkedList

Collection<--Set<--HashSet<--LinkedHashSet

Vector : 基於ArrayList,實際上就是封裝了Array所不具備的一些功能方便我們使用,它不可能不受Array的限制。效能也就不可能超越Array。所以,在可能的情況下,我們要多運用Array(執行緒安全的集合,與

ArrayList相比)。

ArrayList:執行緒不安全的集合,所以在效能上要比Vector優越一些,但是當執行到多執行緒環境中時,可需要自己在管理執行緒的同步問題(需要自己處理)。

LinkedList:它不是基於Array的,所以不受Array效能的限制。它每一個節點(Node)都包含兩方面的內容:1.節點本身的資料(data);2.下一個節點的資訊(nextNode)。所以當對LinkedList做新增,刪除動作的時候就不用像基於ArrayList一樣,必須進行大量的資料移動。只要更改nextNode的相關資訊就可以實現了。這就是LinkedList的優勢。

List總結(單列集合):

1. 所有的List中只能容納單個不同型別的物件組成的表,而不是KeyValue鍵值對。例如:[ tom,1,c ]

2. 所有的List中可以有相同的元素,例如Vector中可以有[ tom,koo,too,koo ]

3. 所有的List中可以有null元素,例如[ tom,null,1 ]

4. 基於ArrayListVectorArrayList)適合查詢,通過索引進行遍歷,而LinkedList(連結串列)適合新增,刪除操作

HashSet:雖然SetList都實現了Collection介面,但是實現方式卻大不一樣。List基本上都是以Array為基礎。但是

Set則是在HashMap的基礎上來實現的(層資料結構不一樣),這個就是SetList的根本區別。HashSet的儲存方式是把HashMap中的Key作為Set的對應儲存項(不能有重複項)。

Set中不能像在List中一樣有重複的項的根本原因,因為HashMapkey是不能有重複的。

Set總結:

1. Set實現的基礎是MapHashMap);

2.  Set中的元素是不能重複的,如果使用add(Object obj)方法新增已經存在的物件,則會覆蓋前面的物件

Map集合

HashTable實現一個映象,所有的鍵必須非空。為了能高效的工作,定義鍵的類必須實現hashcode()方法和equal()方法。這個類是前面java實現的一個繼承,並且通常能在實現映象的其他類中更好的使用。 執行緒安全的集合

HashMap: 實現一個映象,允許儲存空物件,而且允許鍵是空(由於鍵必須是唯一的,當然只能有一個)。(允許空鍵存在),執行緒不安全的集合。

幾個面試常見問題

1.ArrayListVector有什麼區別?HashMapHashTable有什麼區別?

A:VectorHashTable是執行緒同步的(synchronized)。效能上,ArrayListHashMap分別比VectorHashtable要好。

2.大致講解java集合的體系結構

  ListSetMap是這個集合體系中最主要的三個介面。

    其中ListSet繼承自Collection介面。

Set不允許元素重複HashSetTreeSet是兩個主要的實現類。

List有序且允許元素重複ArrayListLinkedListVector是三個主要的實現類。

Map也屬於集合系統,但和Collection介面不同。Mapkeyvalue的對映集合,其中key列就是一個集合。key不能重複,但是value可以重複。HashMapTreeMapHashtable是三個主要的實現類。

基於ArrayListVectorArrayList)適合查詢,而LinkedList(連結串列)適合新增,刪除操作。

3.Collection Collections的區別

Collection是集合類的上級介面,繼承與他的介面主要有SetList.

Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜尋、排序、執行緒安全化等操作

ListMapSet三個介面,存取元素時,各有什麼特點

List  以特定次序來持有元素,可有重複元素;

Set  無法擁有重複元素,內部排序(無序);

Map 儲存key-value值,value可多值。