java集合框架

java集合框架:

  1. 什麼是框架:類庫的集合

  2.集合框架:用來表示和操作的統一的架構,包含了實現集合的接口與類

  3.集合:存放數據的容器

集合框架包含了兩部分:

一部分是接口,一部分是類

 4.爲什麼會出現接口:因爲集合框架中的很多類 功能是相似的【所以用接口來規範類】

        主要結構圖:

 

誤解:以前總是認爲Collection是集合的頂級接口,現在才明白答案是錯誤的,在"集合框架"中,接口 Map 和 Collection 在層次結構沒有任何親緣關係,它們是截然不同的。 都是這句話:【Collection 層次結構 中的根接口。Collection 表示一組對象,這些對象也稱爲 collection 的元素】誤導的原因。

其實現在明白了再回頭看:的確是這樣呀。前面說過:因爲集合框架中的很多類 功能是相似的【所以用接口來規範類】,再用這句話比較下Collection和Map接口中對元素的操作方法 就會明白了..因爲他們實在沒有編寫共同的一個接口的必要。

不要簡單的認爲集合類機會就這些,jdk中集合類有很多這些不過是我們經常用到的而已

Collection、List、Set、Queue和Map都是接口(Interface),不是具體的類實現。

一.List[public interface List<E>extends Collection<E>]:

A.有序的集合接口,可以對列表中每個元素的插入位置進行精確地控制。用戶可以根據元素的整數索引(在列表中的位置)訪問元素,並搜索列表中的元素。

B.與 set 不同,列表通常允許重複的元素。更正式地說,列表通常允許元素e1和元素e2滿足e1.equals(e2).並且如果列表本身允許 null 元素的話,通常它們允許多個 null 元素。難免有人希望通過在用戶嘗試插入重複元素時拋出運行時異常的方法來禁止重複的列表

C.List 接口在 iterator、add、remove、equals 和 hashCode 方法的協定上加了一些其他約定,更加規範了 Collection 接口中指定的約定。爲方便起見,這裏也包括了其他繼承方法的聲明

D.List 接口提供了 4 種對列表元素進行定位(索引)訪問方法。列表(像 Java 數組一樣)是基於 0 的。注意,這些操作可能在和某些實現(例如 LinkedList 類)的索引值成比例的時間內執行。因此,如果調用方不知道實現,那麼在列表元素上迭代通常優於用索引遍歷列表

E. 除了具有Collection接口必備的iterator()方法外,List還提供一個listIterator()方法,返回一個 ListIterator接口,和標準的Iterator接口相比,ListIterator多了一些add()之類的方法,允許添加,刪除,設定元素,還能向前或向後遍歷。

至於 List提供如下方法:  

 

 

 

List接口實現類很多:

AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector 一般情況下主要用到的是ArrayList,和LinkedList,其他的類並不是說沒用 

 

 

ArrayList

ArrayList允許所有元素包括null。ArrayList沒有同步

理解一:ArrayList 使用一個內置的數組來存儲元素,這個數組的起始容量是10.當數組需要增長時,新的容量按如下公式獲得:新容量=(舊容量*3)/2+1,也就是說每一次容量大概會增長50%。這就意味着,如果你有一個包含大量元素的ArrayList對象,那麼最終將有很大的空間會被浪費掉,這個浪費是由 ArrayList的工作方式本身造成的。如果沒有足夠的空間來存放新的元素,數組將不得不被重新進行分配以便能夠增加新的元素。對數組進行重新分配,將會導致性能急劇下降。如果我們知道一個ArrayList將會有多少個元素,我們可以通過構造方法來指定容量。我們還可以通過trimToSize方法在 ArrayList分配完畢之後去掉浪費掉的空間。

 

 

 

理解二:ArrayList是用數組實現的,它不是真正的鏈表,在初始化的時候它先對數組設置一個初始容量,當數組空間不夠的時候,它會重新構建一個容量更大的數組,然後把先前的元素拷貝進去

不管是一還是二暫且不管他存放元素的方式。唯一一點可以確認他使用內置的數組

 

LinkedList 

 

List接口的鏈接列表實現。實現所有可選的列表操作,並且允許所有元素(包括 null)。除了實現 List 接口外,LinkedList 類還爲在列表的開頭及結尾 get、remove 和 insert 元素提供了統一的命名方法。這些操作允許將鏈接列表用作堆棧、隊列或雙端隊列 (deque)。此類實現 Queue 接口,爲 add、poll 等提供先進先出隊列操作。其他堆棧和雙端隊列操作可以根據標準列表操作方便地進行再次強制轉換。雖然它們可能比等效列表操作運行稍快,但是將其包括在這裏主要是出於方便考慮

發佈了80 篇原創文章 · 獲贊 54 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章