【JavaSE】集合類Collection集合Map集合的簡單介紹,List介面,中三個常用子類ArrayList、Vector、LinkedList之間的比較。Set介面。
集合類
集合類就是動態的用陣列儲存一組物件的資訊。在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。
相關文章
- Java List 常用集合 ArrayList、LinkedList、VectorJava
- 【java】【集合】List的三個子類—ArrayList、Vector、LinkedList的區別和聯絡Java
- List集合(ArrayList-LinkedList);Set集合(HashSet-TreeSet)
- Java Collection介面 ArrayList集合(容器)Java
- Java執行緒安全的集合類:Map、List、SetJava執行緒
- List集合總結,對比分析ArrayList,Vector,LinkedList
- 集合框架-List的子類框架
- JAVA集合詳解(Collection和Map介面)Java
- Java 集合 ArrayList VS LinkedList VS VectorJava
- Set集合的直接子類TreeSet
- Java集合類: Set、List、Map、Queue使用場景梳理Java
- Java學習--java中的集合框架、Collection介面、list介面Java框架
- List介面下的集合原始碼分析——LinkedList原始碼
- Java中Collection Frame中常用集合簡析(ArrayList,Vector,HashSet,TreeSet...)Java
- java中的List介面(ArrayList、Vector、LinkedList)Java
- Set集合的具體子類:HashSet
- 小白學集合之List介面
- JAVA集合——Map介面Java
- java集合類介紹Java
- Java集合系列之Collection與Map介面巨集觀把控Java
- Java集合框架List,Map,Set等Java框架
- JavaSE基礎:集合類Java
- Map集合中的具體子類TreeMap
- Java集合 Collection、Set、Map、泛型 簡要筆記Java泛型筆記
- Java集合框架的概念以及常用介面的介紹Java框架
- Java集合類——MapJava
- Java 中的泛型 集合(List,Set) MapJava泛型
- 集合框架學習之List介面框架
- tcbs之集合類與子類的示例
- Java集合框架中的介面和類Java框架
- JAVA集合框架 - Map介面Java框架
- Java 的 Collection 與 List 集合Java
- 十五個常用的 Laravel 集合(Collection)Laravel
- 15個常用的Laravel 集合(Collection)Laravel
- 【Java集合】單列集合Collection常用方法詳解Java
- java基礎學習之十:集合型別Set/List/Map(TreeSet,LinkedList,TreeMap)Java型別
- C#各類集合介紹C#
- Python之set集合的相關介紹Python