1. 程式人生 > >JAVA集合框架總結(一)

JAVA集合框架總結(一)

雖然我們會經常使用到集合框架,但個人感覺內容還是有點多,經過各種查閱資料及自己平時的積累,

做了一個個人認為比較全面的總結吐舌頭

首先,盜用一張集合框架圖:


總的說來,Java API中所用的集合類,都是實現了Collection介面,他的一個類繼承結構如下:

Collection<--List<--Vector

Collection<--List<--ArrayList

Collection<--List<--LinkedList

Collection<--Set<--HashSet

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

Collection<--Set<--SortedSet<--TreeSet

PS:此處也許有人會問,Map難道不是集合嗎?他並沒有實現Collection介面呀?

其實,在《java程式設計思想》中我們能找到答案:

java程式設計思想》的11章,第216頁,正數第13行,中原文:……其中基本的型別是LIst、Set、Queue和Map。這些物件型別也稱為集合類,但由於Java類庫中使用了Collection這個名字來指代該類庫的一個特殊子集,所以我使用了範圍更廣的術語‘容器’稱呼它們……

真相大白

原來如此

我們爭執的'集合'大部分指的是Collection介面下的實現類,而在java核心技術卷一書上把Map也算做集合類的根介面之一,但是java程式設計思想裡用了"集合類"和"容器"兩個稱呼進行了說明和解釋,所以Map是否是集合類(集合框架)的根介面是一個翻譯問題!

書中所說的集合框架的總稱'集合類'和'容器'是一個概念!!!

Collection

    Collection為集合層級的根介面,List,Set,Queue分別是他的子介面,屬於單列集合。

           List

        簡單來說,list是有序的,元素可重複的,特點如下:

        1. 

所有的List中只能容納單個不同型別的物件組成的表,而不是Key-Value鍵值對。

        2. 所有的List中可以有相同的元素

        3. 所有的List中可以有null元素,甚至是多個null元素,且每個null佔一個 位置

        4. 基於Array的List(Vector,ArrayList)適合查詢,而LinkedList(連結串列適合新增,刪除操作。

        有ArrayList ,LinkedList,Vector三個實現類:

ArrayList:是基於Array的List,其封裝了一些陣列所不具備的功能方便我們使用, 所以ArrayList的效能不會高於陣列, ArrayList是非同步的,效率高,但執行緒不安全的。

Vector:底層也是基於Array的List,與ArrayList一樣,但很重要的一點就是Vector“synchronized”的,Vector是同步的,是執行緒安全的,這個也是Vector和ArrayList的唯一的區別。

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

總結:在List子類中,ArrayList和Vector是基於陣列,查詢快,增刪慢;LinkedList基於連結串列,增刪快,查詢慢

    Set

        簡單來說,Set是無序的,元素不可重複的,特點如下:

        1. Set實現的基礎是Map(HashMap)

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

            Set介面下有HashSet,LinkedHashSet,TreeSet

    Queue

      佇列遵循FIFO(先進先出原則),有單佇列和迴圈佇列兩種

     Map

    對映(map)與集(set)或列表(list)有明顯區別,對映中每個項都是成對的。通過key-value的形式存取資料。一個key對應一個 value,key是唯一的,value可以重複。

    其子類有:HashMap,HashTable,TreeMap等。

 

集合框架的概述和大致結構先總結到這裡,往後再繼續總結:

集合中存放的資料型別,集合的遍歷,及集合的執行緒安全問題等。

 

參考:http://blog.csdn.net/zimou5581/article/details/52706283 

參考:https://baike.baidu.com/item/java%E9%9B%86%E5%90%88%E7%B1%BB/4758922?fr=aladdin