Java集合框架使用總結
前言:
本文是對Java集合框架做了一個概括性的解說,目的是對Java集合框架體系有個總體認識,如果你想學習具體的介面和類的使用方法,請參看Java API文件。
一、概述
資料結構對程式設計有著深遠的影響,在程式導向的C語言中,資料庫結構用struct來描述,而在物件導向的程式設計中,資料結構是用類來描述的,並且包含有對該資料結構操作的方法。
在Java語言中,Java語言的設計者對常用的資料結構和演算法做了一些規範(介面)和實現(具體實現介面的類)。所有抽象出來的資料結構和操作(演算法)統稱為Java集合框架(Java Collection Framework)。
Java程式設計師在具體應用時,不必考慮資料結構和演算法實現細節,只需要用這些類建立出來一些物件,然後直接應用就可以了。這樣就大大提高了程式設計效率。
二、集合框架的層次結構
Collection是集合介面
|————Set子介面:無序,不允許重複。
|————List子介面:有序,可以有重複元素。
區別:Collections是集合類
Set和List對比:
Set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變。
List:和陣列類似,List可以動態增長,查詢元素效率高,插入刪除元素效率低,因為會引起其他元素位置改變。
Set和List具體子類:
Set
|————HashSet:以雜湊表的形式存放元素,插入刪除速度很快。
List
|————ArrayList:動態陣列
|————LinkedList:連結串列、佇列、堆疊。
Array和java.util.Vector
Vector是一種老的動態陣列,是執行緒同步的,效率很低,一般不贊成使用。
三、Iterator迭代器(介面)
Iterator是獲取集合中元素的過程,實際上幫助獲取集合中的元素。
迭代器代替了 Java Collections Framework 中的 Enumeration。迭代器與列舉有兩點不同:
迭代器允許呼叫方利用定義良好的語義在迭代期間從迭代器所指向的集合移除元素。
方法名稱得到了改進。
Iterator僅有一個子介面ListIterator,是列表迭代器,允許程式設計師按任一方向遍歷列表、迭代期間修改列表,並獲得迭代器在列表中的當前位置。ListIterator 沒有當前元素;它的游標位置 始終位於呼叫 previous() 所返回的元素和呼叫 next() 所返回的元素之間。在長度為 n 的列表中,有 n+1 個有效的索引值,從 0 到 n(包含)。
四、集合框架之外的Map介面
Map將鍵對映到值的物件。一個對映不能包含重複的鍵;每個鍵最多隻能對映一個值。
Map介面是Dictionary(字典)抽象類的替代品。
Map 介面提供三種collection 檢視,允許以鍵集、值集合或鍵-值對映關係集的形式檢視某個對映的內容。對映的順序 定義為迭代器在對映的 collection 檢視中返回其元素的順序。某些對映實現可明確保證其順序,如 TreeMap 類;某些對映實現則不保證順序,如 HashMap 類。
有兩個常見的已實現的子類:
HashMap:基於雜湊表的 Map 介面的實現。此實現提供所有可選的對映操作,並允許使用 null 值和 null 鍵。(除了不同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。)此類不保證對映的順序,特別是它不保證該順序恆久不變。
TreeMap:它實現SortedMap 介面的基於紅黑樹的實現。此類保證了對映按照升序順序排列關鍵字,根據使用的構造方法不同,可能會按照鍵的類的自然順序 進行排序(參見 Comparable),或者按照建立時所提供的比較器進行排序。
Hashtable:此類實現一個雜湊表,該雜湊表將鍵對映到相應的值。任何非 null 物件都可以用作鍵或值。
五、執行緒安全類
在集合框架中,有些類是執行緒安全的,這些都是JDK1.1中的出現的。在JDK1.2之後,就出現許許多多非執行緒安全的類。
下面是這些執行緒安全的同步的類:
Vector:就比ArrayList多了個同步化機制(執行緒安全)。
Statck:堆疊類,先進後出。
Hashtable:就比HashMap多了個執行緒安全。
Enumeration:列舉,相當於迭代器。
除了這些之外,其他的都是非執行緒安全的類和介面。
執行緒安全的類其方法是同步的,每次只能一個訪問。是重量級物件,效率較低。對於非執行緒安全的類和介面,在多執行緒中需要程式設計師自己處理執行緒安全問題。
六、其他一些介面和類介紹
Dictionary和Hashtable類:
Dictionary提供鍵值對映的功能,是個抽象類。一般使用它的子類HashTable類。遍歷Hashtable類要用到列舉。
Properties類
Properties 繼承於 Hashtable,Properties 類表示了一個持久的屬性集。Properties 可儲存在流中或從流中載入。屬性列表中每個鍵及其對應值都是一個字串。一般可以通過讀取properties配置檔案來填充Properties物件。
參考文件:
java api 文件