【JavaSE】集合類Collection集合Map集合的簡單介紹,List介面,中三個常用子類ArrayList、Vector、LinkedList之間的比較。Set介面。

馮某r發表於2019-02-22

集合類

集合類就是動態的用陣列儲存一組物件的資訊。在java中陣列用的並不多就是因為陣列的長度已經固定了,而集合類是動態的,陣列長度可以改變。集合類(java.util包)有兩大介面分別是:Collection和Map,實現這倆個介面的子類都可以儲存物件資訊,區別就是Collection是對單個物件進行儲存,而Map儲存的是一對物件,分別用Key、Value標識。

一、Collection介面

Collection介面的定義是:

public interface Collection<E> extends Iterable<E>

從JDK1.5開始發現Collection介面上追加有泛型應用,這樣的直接好處就是可以避免ClassCastException,裡面的所有資料的儲存型別應該是相同的。在JDK1.5之前Iterable介面中的iterator()方法是直接在Collection介面中定義的。此接 口的常用方法有如下幾個:

NO 方法名稱 型別 描述
1. public boolean add(E e) 普通 向集合中新增一個資料
2. public boolean addAll(Collection<? extend E> c) 普通 向集合中新增一組資料
3. public void clear() 普通 清空集合中的資料
4. public boolean contains(Object obj) 普通 查詢資料是否存在,需要使用equals()方法
5. public boolean remove(Object obj) 普通 刪除資料,需要使用equals()方法
6. public int size() 普通 取得集合長度
7. public Object[] toArray() 普通 將集合變為物件陣列返回
8. public Iterator iterator() 普通 取得Iterator介面物件,用於集合的輸出

以上方法add()和Iterator()方法使用的最多。一般並不會直接使用Collection介面,因為它只是一個儲存資料的標準,並不能區分儲存型別,例如:資料能否區分可重複和不可重複。所以Collection下面有兩個子介面解決了如上問題:List介面(允許資料重複)、Set介面(不允許資料重複)。

1.List介面

在實際開發之中,List介面的使用頻率可以達到Collection系列的80%。在進行集合處理的時候,優先考慮List介面。
首先來觀察List介面中提供的方法,在這個介面中有兩個重要的擴充方法 :

No 方法名稱 型別 描述
1. public E get (int index) 普通 根據索引取得儲存資料
2. public E set(int index,E element) 普通 修改指定索引下的資料

List提供了一個get擴充方法,可以根據索引取得所儲存的資料。由於List本身還是一個介面,要想使用這個方法,還得藉助子類例項化物件。在List介面下有三個常用子類:ArrayList、Vector、LinkedList。
先用一張圖看一下它們之間的繼承關係:
在這裡插入圖片描述這些子類在使用上比較簡單,在這裡主要比較一下它們的區別:

子類 內部資料結構 出現時間 效能 執行緒是否安全
ArrayList 陣列實現 JDK1.2 非同步處理,效能高 非執行緒安全
Vector 陣列實現 JDK1.0 同步處理,效能低 執行緒安全
LinkedList 連結串列實現 JDK1.2 非同步處理,效能高 非執行緒安全

2.Set介面

Set介面與List介面最大的區別就是Set儲存的資料不允許重複,而且Set沒有對Collection介面進行擴充。
在Set介面中有兩個常用子類:HashSet(無序儲存)、TreeSet(有序儲存)。看一下它們直接的關係圖:
在這裡插入圖片描述可以看到Set的子類也是通過繼承抽象類才實現Set的功能的。
既然TreeSet子類可以進行排序,所以我們可以利用TreeSet實現資料的排列處理操作。此時要想進行排序實際上是針 對於物件陣列進行的排序處理,而如果要進行物件陣列的排序,物件所在的類一定要實現Comparable介面並且覆寫 compareTo()方法,只有通過此方法才能知道大小關係
在一般情況下都使用的是HashSet,資料太多的話比較起來很麻煩。

二、Map介面

Collection集合的特點是每次進行單個物件的儲存,如果現在要進行一對物件(偶物件)的儲存就只能使用Map集合來 完成
首先來觀察Map介面定義:

public interface Map<K,V>

Map介面下的重要子類有:HashMap、TreeMap、EnumMap、HashTable。

區別 HashMap HashTable
推出版本 JDK1.2 JDK1.0
效能 非同步處理效能高 同步處理效能低
安全性 非執行緒安全 執行緒安全
null操作 允許存放null(有且只有一個) key和value都不為null,否則出現NullPointerException

TreeMap效能沒有HashMap高,但是它會對儲存的資料進行排序,所以一般需要排序的時候才用TreeMap。

相關文章