1. 程式人生 > >List介面、Set介面和Map介面

List介面、Set介面和Map介面

1、List和Set介面自Collection介面,而Map不是繼承的Collection介面

Collection表示一組物件,這些物件也稱為collection的元素;一些 collection允許有重複的元素,而另一些則不允許;一些collection是有序的,而另一些則是無序的;JDK中不提供此介面的任何直接實 現,它提供更具體的子介面(如 Set 和 List)實現;Map沒有繼承Collection介面,Map提供key到value的對映;一個Map中不能包含相同key,每個key只能對映一個value;Map介面提供3種集合的檢視,Map的內容可以被當做一組key集合,一組value集合,或者一組key-value對映;
2.、List介面

元素有放入順序,元素可重複 

List介面有三個實現類:LinkedList,ArrayList,Vector 

LinkedList:底層基於連結串列實現,連結串列記憶體是散亂的,每一個元素儲存本身記憶體地址的同時還儲存下一個元素的地址。連結串列增刪快,查詢慢 

ArrayList和Vector的區別:ArrayList是非執行緒安全的,效率高;Vector是基於執行緒安全的,效率低 

	元素有放入順序,元素可重複 
List是一種有序的Collection,可以通過索引訪問集合中的資料,List比Collection多了10個方法,主要是有關索引的方法。
1).所有的索引返回的方法都有可能丟擲一個IndexOutOfBoundsException異常

2).subList(int fromIndex, int toIndex)返回的是包括fromIndex,不包括toIndex的檢視,該列表的size()=toIndex-fromIndex。
  • 所有的List中只能容納單個不同型別的物件組成的表,而不是Key-Value鍵值對。例如:[ tom,1,c ];
  • 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
  • 所有的List中可以有null元素,例如[ tom,null,1 ];
  • 基於Array的List(Vector,ArrayList)適合查詢,而LinkedList(連結串列)適合新增,刪除操作;
3、Set介面
元素無放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的)
	Set介面有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet 
	SortedSet介面有一個實現類:TreeSet(底層由平衡二叉樹實現)
	Query介面有一個實現類:LinkList 
Set具有與Collection完全一樣的介面,因此沒有任何額外的功能,不像前面有兩個不同的List。實際上Set就是Collection,只是行為不同。(這是繼承與多型思想的典型應用:表現不同的行為。)Set不儲存重複的元素(至於如何判斷元素相同則較為負責)
Set : 存入Set的每個元素都必須是唯一的,因為Set不儲存重複元素。加入Set的元素必須定義equals()方法以確保物件的唯一性。Set與Collection有完全一樣的介面。Set介面不保證維護元素的次序。
HashSet : 為快速查詢設計的Set。存入HashSet的物件必須定義hashCode()。
TreeSet : 儲存次序的Set, 底層為樹結構。使用它可以從Set中提取有序的序列。
LinkedHashSet : 具有HashSet的查詢速度,且內部使用連結串列維護元素的順序(插入的次序)。於是在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。
4、Map介面
以鍵值對的方式出現的 

Map介面有三個實現類:HashMap,HashTable,LinkeHashMap 

HashMap非執行緒安全,高效,支援null;

HashTable執行緒安全,低效,不支援null 
SortedMap有一個實現類:TreeMap