1. 程式人生 > >Java類集合整理

Java類集合整理

1、概念

1、路徑:集合類存放於java.util包中。

2、儲存:集合類存放的都是物件的引用,而非物件本身,出於表達上的便利,我們稱集合中的物件就是指集合中物件的引用(reference)。另一面,就是集合不支援存放基本資料型別。

3、分類:集合型別主要有3種:list(列表)、set(集)和map(對映)。

        列表,主要特徵:物件以線性方式儲存,無特定順序,只有一個開頭和一個結尾,當然,它與根本沒有順序的集是不同的。列表在資料結構中分別表現為:陣列和向量、連結串列堆疊、佇列。 

        集(set),是最簡單的一種集合,它的物件不按特定方式排序,只是簡單的把物件加入集合中,就像往口袋裡放東西。對集中成員的訪問和操作是通過集中物件的引用進行的,所以集中不能有重複物件(無序決定不能有重複物件)

。集也有多種變體,可以實現排序等功能,如TreeSet,它把物件新增到集中的操作將變為按照某種比較規則將其插入到有序的物件序列中。它實現的是SortedSet介面,也就是加入了物件比較的方法。通過對集中的物件迭代,我們可以得到一個升序的物件集合。

        對映與集或列表有明顯區別,對映中每個項都是成對的。對映中儲存的每個物件都有一個相關的關鍵字(Key)物件,關鍵字決定了 物件在對映中的儲存位置,檢索物件時必須提供相應的關鍵字,就像在字典中查單詞一樣。關鍵字應該是唯一的。關鍵字本身並不能決定物件的儲存位置,它需要對過一種雜湊(hashing)技術來處理,產生一個被稱作雜湊碼(hash code)的整數值,雜湊碼通常用作一個偏置量,該偏置量是相對於分配給對映的記憶體區域起始位置的,由此確定關鍵字/物件對的儲存位置。理想情況 下,雜湊處理應該產生給定範圍內均勻分佈的值,而且每個關鍵字應得到不同的雜湊碼。

4、介面:集合介面分為:Collection和Map,list、set實現了Collection介面

 

2、JAVA集合類

集合的兩個頂級介面分別為:CollectionMap

2.1、Collection介面

Collection介面下有兩個比較常用的介面分別是List(列表)和Set(集),分別繼承與Collection介面,extends,其中List可以儲存重複元素,元素是有序的(存取順序一致),可以通過List腳標來獲取指定元素;而Set不可以有重複元素,元素是無序的。


第一、List介面

List介面中,比較常用的類有三個:ArrayList、Vactor、LinkedList,存放都是有序的。後者實現前者,implements

1)Vector 執行緒安全的,多了一種取出元素的方式:列舉(Enumeration),但已被ArrayList取代。適用於多執行緒中。

     基於Array的List,其實就是封裝了Array所不具備的一些功能方便我們使用,它不可能走出Array的限制。效能也就不可能超越Array。所以,在可能的情況下,我們要多運用Array。另外很重要的一點就是Vector使用了“synchronized”,這個也是Vector和ArrayList的唯一的區別。

2)ArrayList 執行緒不安全的,對元素的查詢速度快。適用於查多,修改刪除少的場景。

        同Vector一樣是一個基於陣列實現的,但是不同的是ArrayList不是同步的。所以在效能上要比Vector優越一些,但是當執行到多執行緒環境中時,可需要自己在管理執行緒的同步問題。LinkedList:LinkedList不同於前面兩種List,它不是基於Array的,所以不受Array效能的限制。它每一個節點(Node)都包含兩方面的內容:1.節點本身的資料(data);2.下一個節點的資訊(nextNode)。所以當對LinkedList做新增,刪除動作的時候就不用像基於Array的List一樣,必須進行大量的資料移動。只要更改nextNode的相關資訊就可以實現了。這就是LinkedList的優勢。

3)LinkedList 執行緒不安全,基於連結串列結構,對元素的增刪速度很快。適用於查詢少,修改刪除較多的場景。


第二、Set介面

Set介面中,比較常用的類有兩個:HashSet、TreeSet:

1)HashSet:要保證元素唯一性,需要覆蓋掉Object中的equals和hashCode方法(因為底層是通過這兩個方法來判斷兩個元素是否是同一個),是無序的。  

2)TreeSet:以二叉樹的結構對元素進行儲存,可以對元素進行排序

      排序的兩種方式:

      1、元素自身具備比較功能,元素實現Comparable介面,覆蓋compareTo方法。

      2、建立一個比較器物件,該物件實現Comparator介面,覆蓋compare方法,並將該物件作為引數傳給TreeSet的建構函式(可以用匿名內部類)。


2.2、Map介面

Map介面,其特點是:元素是成對出現的,以鍵和值的形式體現出來,鍵要保證唯一性:常用類有:HashMap,Hashtable ,TreeMap。

1)HashMap執行緒不安全等的,允許存放null鍵null值。

2)Hashtable執行緒安全的,不允許存放null鍵null值。

3)TreeMap:可以對鍵進行排序(要實現排序方法同TreeSet)。


Collection和Map兩個介面對元素操作的區別:

1、存入元素:

Collection介面下的實現類通過add方法來完成,而Map下是通過put方法來完成。

2、取出元素:

Collection介面下:List介面有兩種方式:1、get(腳標);2、通過Iterator迭代方式獲取元素;而Vactor多了一種列舉(Enumeration)的方式。Set介面通過迭代的方式獲取元素。

Map介面下:先通地keySet獲取鍵的系列,然後通過該系列使用Iterator迭代方式獲取元素值。