Java類集合整理
1、概念
1、路徑:集合類存放於java.util包中。
2、儲存:集合類存放的都是物件的引用,而非物件本身,出於表達上的便利,我們稱集合中的物件就是指集合中物件的引用(reference)。另一面,就是集合不支援存放基本資料型別。
3、分類:集合型別主要有3種:list(列表)、set(集)和map(對映)。
列表,主要特徵:物件以線性方式儲存,無特定順序,只有一個開頭和一個結尾,當然,它與根本沒有順序的集是不同的。列表在資料結構中分別表現為:陣列和向量、連結串列、堆疊、佇列。
集(set),是最簡單的一種集合,它的物件不按特定方式排序,只是簡單的把物件加入集合中,就像往口袋裡放東西。對集中成員的訪問和操作是通過集中物件的引用進行的,所以集中不能有重複物件(無序決定不能有重複物件)
對映與集或列表有明顯區別,對映中每個項都是成對的。對映中儲存的每個物件都有一個相關的關鍵字(Key)物件,關鍵字決定了 物件在對映中的儲存位置,檢索物件時必須提供相應的關鍵字,就像在字典中查單詞一樣。關鍵字應該是唯一的。關鍵字本身並不能決定物件的儲存位置,它需要對過一種雜湊(hashing)技術來處理,產生一個被稱作雜湊碼(hash code)的整數值,雜湊碼通常用作一個偏置量,該偏置量是相對於分配給對映的記憶體區域起始位置的,由此確定關鍵字/物件對的儲存位置。理想情況 下,雜湊處理應該產生給定範圍內均勻分佈的值,而且每個關鍵字應得到不同的雜湊碼。
4、介面:集合介面分為:Collection和Map,list、set實現了Collection介面
2、JAVA集合類
集合的兩個頂級介面分別為:Collection和Map
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迭代方式獲取元素值。