一.前言
作為Java面試的常客【集合類型】是永恆的話題;在開發中,主要了解具體的使用,沒有太多的去關注具體的理論說明,掌握那幾種常用的集合類型貌似也就夠使用了;導致這一些集合類型的理論有可能經常的忘記,下面就對集合類型進行詳細的介紹。
二.集合樹繼承圖解
集合類型主要有3種:set(集)、list(列表)和map(映射)。
Collection接口
Collection是最基本的集合接口,一個Collection代表一組Object,即Collection的元素(Elements)。Java SDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子接口”如List和Set。
所有實現Collection接口的類都必須提供兩個標准的構造函數:無參數的構造函數用於創建一個空的Collection,有一個 Collection參數的構造函數用於創建一個新的Collection,這個新的Collection與傳入的Collection有相同的元素。後一個構造函數允許用戶復制一個Collection。
如何遍歷Collection中的每一個元素?不論Collection的實際類型如何,它都支持一個iterator()的方法,該方法返回一個迭代子,使用該迭代子即可逐一訪問Collection中每一個元素。典型的用法如下:
Iterator it = collection.iterator(); // 獲得一個迭代子 while(it.hasNext()) { Object obj = it.next(); // 得到下一個元素 }
由Collection接口派生的兩個接口是List和Set。
三.集合實現類
Collection接口:
List接口:【實現類: LinkedList,Vector,ArrayList】
Set接口:【實現類: HashSet、LinkedHashSet】
SortedSet接口:【’實現類:TreeSet】
Map接口:
Map接口:【實現類:HashMap、Hashtable、LinkedHashMap、Properties】
1、List:有序列表,允許存放重復的元素
實現類:
ArrayList:數組實現,需要一塊連續的存儲空間,查詢快,增刪慢,不同步,線程不安全,輕量級;
LinkedList:鏈表實現,增刪快,查詢慢;
Vector:數組實現,同步,線程安全,重量級;基於Array的List,其實就是封裝了Array所不具備的一些功能方便我們使用,它不可能走出Array的限制。性能也就不可能超越Array。所以,在可能的情況下,我們要多運用Array。另外很重要的一點就是Vector“synchronized”的,這個也是Vector和ArrayList的唯一的區別。ArrayList:同Vector一樣是一個基於Array上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優越一些,但是當運行到多線程環境中時,可需要自己在管理線程的同步問題。LinkedList:LinkedList不同於前面兩種List,它不是基於Array的,所以不受Array性能的限制。它每一個節點(Node)都包含兩方面的內容:1.節點本身的數據(data);2.下一個節點的信息(nextNode)。所以當對LinkedList做添加,刪除動作的時候就不用像基於Array的List一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了。這就是LinkedList的優勢。
2、Set:無序集合,不允許存放重復的元素
實現類:
HashSet: HashSet的後台有一個HashMap,equals返回true,hashCode返回相同的整數,哈希表:存儲的數據是無序的;初始化後台容量;只不過生成一個HashSet的話,系統只提供key的訪問;如果有兩個Key重復,那麼會覆蓋之前的;
LinkedHashSet:此實現與 HashSet 的不同之外在於,後者維護著一個運行於所有條目的雙重鏈接列表。存儲的數據是有序的。
子接口SortedSet,對Set排序實現類 :TreeSet:使用元素的自然順序對元素進行排序,或者根據創建 set 時提供的 Comparator 進行排序;二叉樹實現的;
3、Map
HashMap:鍵值對,key不能重復,但是value可以重復;key的實現就是HashSet;value對應著放;允許null的鍵或值;
Hashtable:線程安全的,不允許null的鍵或值;
Properties:key和value都是String類型,用來讀配置文件;TreeMap:對key排好序的Map; key 就是TreeSet, value對應每個key; key要實現Comparable接口或TreeMap有自己的構造器;
LinkedHashMap:此實現與 HashMap 的不同之處在於,後者維護著一個運行於所有條目的雙重鏈接列表。存儲的數據是有序的。
4、兩個工具類 Arrays 和 Collections
Arrays、此類包含用來操作數組(比如排序和搜索)的各種方法。
Collections、主要提供了在 collection 上進行操作的靜態方法(同步集合類方法) 。