1. 程式人生 > >java的集合類(備忘)

java的集合類(備忘)

一、集合類

1、集合其實就是存放物件的容器,專業點說就是集合是用了儲存和管理其它物件的物件,即物件的容器。集合可以擴容,長度可變,可以儲存多種型別的資料,而陣列長度不可變,只能儲存單一型別的元素。

2、用圖來總結哈集合的總況

map


Collection


下面是網上找到的圖:


(注:上述類圖中,實線邊框的是實現類,比如ArrayList,LinkedList,HashMap等,折線邊框的是抽象類,如AbstractList,AbstractMap等,而點線邊框的是介面,比如Collection,Iterator,List等


集合中的結構和幾個實現類:

有序否

是否允許元素重複

Collection

List

Set

AbstractSet

HashSet

TreeSet

是(用二叉樹排序)

Map

AbstractMap

使用key-value來對映和儲存資料,key必須唯一,value可以重複。

HashMap

TreeMap

是(用二叉樹排序)

總述:List、Set、Map是這個集合體系中最主要的三個介面。

其中List/Set繼承至Collection介面。Set不允許元素重複,HashSet和TreeSet是兩個主要的實現類;List有序且允許元素重複,ArrayList、LinkedList和Vector是三個主要的實現 。

Map也屬於集合系統,但是和Collection介面不同,Map是key對value的對映集合,其中key列就是一個集合。Key是不能重複的,但是value是可以重複的,HashMap、TreeMap和Hashtable是三個主要的實現類。

SortedSet和SortedMap介面對元素按指定規則排序,SortedMap是對key列進行排序。

1、Collection介面:

Collection介面是最基本的集合介面,一個Collection代表一組Object的集合,這些Object被稱作為Collection的元素。所有實現Collection介面的類都必須提供兩個標準的建構函式:無引數的建構函式用於建立一個空的Collection,有一個Collection引數的建構函式用於建立一個新的Collection,這個新的Collection與傳入的Collection有相同的元素,後一個建構函式允許使用者複製一個Collection。

如何遍歷Collection中的每一個元素?不論Collection的實際型別如何,它都支援一個iterator()的方法,該方法返回一個迭代子,使用該迭代子即可逐一訪問Collection中每一個元素,典型的用法如下:


這個對於繼承或者實現了Collection介面的類都適用。

操作:

單元素新增、刪除操作

boolean add(Object obj):將物件新增給集合

boolean remove(Object obj):如果集合中有與obj相匹配的物件,則刪除該物件obj。

查詢操作

 int size():返回當前集合中元素的數量(長度)

boolean isEmpty():判斷集合中是否有任何元素(是否為空)

boolean contains(Object obj):查詢集合中是否含有物件obj

Iterator iterator();返回一個迭代器(Iterator型別),用來訪問集合中的各個元素

組操作:作用於元素組或整個集合

boolean containsAll(Collection coll):查詢集合中是否含有集合coll中所有元素

boolean addAll(Collection coll):將集合c中所有元素新增給該集合(批量新增集合)

void clear():刪除集合中所有元素

void removeAll(Collection coll):從集合中刪除集合coll中的所有元素

Void retainAll(Collection coll):從集合中刪除集合coll中不包含的元素(也就是說只保留集合coll中的元素)

Collection轉換為Object陣列

Object[] toArray():返回一個內含集合所有元素的array(陣列)

Object[] toArray(Object[]a):返回一個內含集合所有元素的array。執行期返回的array和引數a的型別相同,需要轉換為正確型別。


1、List介面:它對Collection進行了簡單的擴充,它的具體實現類常用的有ArrayList和LinkedList

ArrayList

它是一種類似陣列的形式進行儲存,因此它的隨機訪問速度極快

LinkedList

它的內部實現是連結串列,它適合於在連結串列中間需要頻繁插入和刪除操作

Iterator

只能對容器進行向前遍歷

ListIterator

繼承了Iterator的思想,並提供了對List進行雙向遍歷的方法。

2、Set介面:它也是Collection的一種擴充套件,但又與List不同,在它中的物件元素不允許重複。它常用的具體實現有HashSet和TreeSet類。

HashSet

HashSet能快速定位一個元素,但是你方法哦HashSet中的物件需要實現hashCode()方法,它使用了前面說過的雜湊碼的演算法。

TreeSet

TreeSet則將放入其中的元素按序存放,這就要求你放入其中的物件是可排序的,

3、Comparable介面和Comparator介面

在“集合框架”中有兩種比較介面:Comparable介面和Comparator介面。像String和Integer等實現Comparable介面以提供一定排序方式,但這樣只能實現該介面一次,對於那些沒有實現Comparable介面的類、或者自定義的類,您可以通過Comparator介面來定義您自己的比較方式。

Comparable

在java.lang包中,Comparable介面適用於一個類有自然順序的時候,假定物件集合是同一個型別,該介面允許您把集合排序成自然順序。

Comparator

若一個類不能用於實現java.lang.Comparable,或者您不喜歡預設的Comparable行為並想提供自己的排序順序(可能多種排序順序方式),你可以實現Comparator介面,從而定義一個比較器。

二、LinkedHashMap與HashMap

1、LinkedHashMap和HashMap都是java.util.Map的實現類。其中LinkedHashMap是HashMap的一個子類。

2、

HashMap

具有很快的訪問速度;

遍歷時,取得資料的順序是完全隨機的;

最多隻允許一條記錄的鍵位null;允許多條記錄的值為null

不支援執行緒的同步,即任一時刻可以有多個執行緒同時寫HashMap,可能會導致資料的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

它的遍歷速度與它的容量有關

LinkedHashMap

遍歷時,取得的資料與存入的時候的順序一致

遍歷的時候,一般情況比HashMap慢,但是它的遍歷速度只是和實際資料有關,與容量無關。

三、List與ArrayList

1.List是一個介面,而ArrayList是一個類。且ArrayList繼承並實現了List類

2.List list=new ArrayList();這句建立了一個ArrayList的物件後把上溯到了List,也就是說list只能使用List的所有物件屬性和方法;如果它們的屬性和方法都相同的話,則屬性呼叫的是List中的,方法是呼叫的ArrayList中的;

ArrayList alist=new ArrayList();這句建立了ArrayList的物件,也就是說alist可以使用ArrayList中的特有的方法;

但是在平常使用中的時候,提倡用第一種,因為List有多個實現類。