Java集合類層次關係整理

《一》Java集合類層次關係整理

         在Java中有一個集合框架,用來表示一個操作集合。在Java 2平臺中實現了一個新的集合框架,但是在先前的集合框架依然可以使用。這裏的結合框架就是我們所說的集合類。一個集合是一種對象它表示了一組對象。集合框架主要是由一些抽象類、接口和一些實現類組成。

         所謂框架就是一個類庫的集合。集合框架就是一個用來表示和操作集合的統一的架構,包含了實現集合的接口與類。在集合框架中有Collection、Sort、List、SortedSet、Map、SortedMap接口,下面我們用圖例的方法看一下它們之間的關係(上層是下層的父類):


  上面的這些接口都是Java.util包中的接口,下面我們簡單介紹一下這些接口。Collection接口是結合類的根接口,Java中沒有提供這個接口的直接的實現類。但是卻讓其被繼承產生了兩個接口,就是Set和List。Set中不能包含重複的元素。SortedSet是一個按照升序排列元素的Set。List是一個有序的集合,可以包含重複的元素。提供了按索引訪問的方式。Map是Java.util包中的另一個接口,它和Collection沒有關係,是相互獨立的,但是都屬於集合類的一部分。Map包含了key-value對。Map不能包含重複的key。SortedMap是一個按照升序排列key的Map。但是Map中可以包含相同的value。

         介紹完了Java集合類的接口及其層次關係之後,我們是想使用集合類的,接口是不能創建對象的,所以我們下面介紹每個接口的實現類。下面圖表中給出了它們之間的關係:

《二》HashSet,TreeSet和LinkedHashSet的區別

Set接口
    Set不允許包含相同的元素,如果試圖把兩個相同元素加入同一個集合中,add方法返回false。
Set判斷兩個對象相同不是使用==運算符,而是根據equals方法。也就是說,只要兩個對象用equals方法比較返回true,Set就不 會接受這兩個對象。

HashSet
    HashSet有以下特點
 不能保證元素的排列順序,順序有可能發生變化
 不是同步的
 集合元素可以是null,但只能放入一個null
當向HashSet結合中存入一個元素時,HashSet會調用該對象的hashCode()方法來得到該對象的hashCode值,然後根據 hashCode值來決定該對象在HashSet中存儲位置。
簡單的說,HashSet集合判斷兩個元素相等的標準是兩個對象通過equals方法比較相等,並且兩個對象的hashCode()方法返回值相 等
注意,如果要把一個對象放入HashSet中,重寫該對象對應類的equals方法,也應該重寫其hashCode()方法。其規則是如果兩個對 象通過equals方法比較返回true時,其hashCode也應該相同。另外,對象中用作equals比較標準的屬性,都應該用來計算 hashCode的值。

LinkedHashSet
    LinkedHashSet集合同樣是根據元素的hashCode值來決定元素的存儲位置,但是它同時使用鏈表維護元素的次序。這樣使得元素看起 來像是以插入順序保存的,也就是說,當遍歷該集合時候,LinkedHashSet將會以元素的添加順序訪問集合的元素。
LinkedHashSet在迭代訪問Set中的全部元素時,性能比HashSet好,但是插入時性能稍微遜色於HashSet。

TreeSet類
    TreeSet是SortedSet接口的唯一實現類,TreeSet可以確保集合元素處於排序狀態。TreeSet支持兩種排序方式,自然排序 和定製排序,其中自然排序爲默認的排序方式。向TreeSet中加入的應該是同一個類的對象。
TreeSet判斷兩個對象不相等的方式是兩個對象通過equals方法返回false,或者通過CompareTo方法比較沒有返回0
自然排序
自然排序使用要排序元素的CompareTo(Object obj)方法來比較元素之間大小關係,然後將元素按照升序排列。
Java提供了一個Comparable接口,該接口裏定義了一個compareTo(Object obj)方法,該方法返回一個整數值,實現了該接口的對象就可以比較大小。
obj1.compareTo(obj2)方法如果返回0,則說明被比較的兩個對象相等,如果返回一個正數,則表明obj1大於obj2,如果是 負數,則表明obj1小於obj2。
如果我們將兩個對象的equals方法總是返回true,則這兩個對象的compareTo方法返回應該返回0
定製排序
自然排序是根據集合元素的大小,以升序排列,如果要定製排序,應該使用Comparator接口,實現 int compare(T o1,T o2)方法

<三> 

java中ArrayList 、LinkList區別

1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。 
   2.對於隨機訪問get和set,ArrayList優於LinkedList,因爲ArrayList可以隨機定位,而LinkedList要移動指針一步一步的移動到節點處。(參考數組與鏈表來思考)
   3.對於新增和刪除操作add和remove,LinedList比較佔優勢,只需要對指針進行修改即可,而ArrayList要移動數據來填補被刪除的對象的空間。

ArrayList和LinkedList是兩個集合類,用於存儲一系列的對象引用(references)。例如我們可以用ArrayList來存儲一系列的String或者Integer


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章