集合的概述
Java中的集合像是一個容器,用來存儲 Java 對象(實際上是對象的引用),這些對象可以是任意的資料類型,并且長度是可變的。集合都位于 java.util 包中。集合按照存儲結構可以分為兩大類,Collection集合與Map集合。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbwxCdh1mcvZ2LcV2Zh1Wa9M3clN2byBXLzN3btg3PuJkbhV3ZE9EbBR1TsVFVSxWWE9EbJV1TstGVSxWSrFFbNpWUsNGVSxWTU9EbRtWUsFFVSxGNyIGcSNTWsh3RiZnTwwkbxcVY2BjMipWN5Nma1cFZ1w2RihWN5pVds1WYwZVbZRHNykFdNNzY2VzQhNTMTJGaW12YrlTeMZTTINGMShUYvwlbj5yZtlmbkN3YuQnclZnbvN2Ztl2Lc9CX6MHc0RHaiojIsJye.jpg)
Collection 集合有兩個重要的子接口,分别是 List 和 Set。List 集合的特點是元素有序,可重複;Set 集合的特點是元素無序,不可重複。這兩個子接口下面是他們的實作類。
Collection 父接口
Collection 是所有單列集合的根接口,在 Collection 中定義了一些方法。
方法聲明 | 功能描述 |
---|---|
boolean add(Object obj) | 向集合中添加一個元素 |
boolean addAll(Collection c) | 将一個集合中的所有元素添加到此集合中 |
void clear() | 清空此集合中的所有元素 |
boolean contains(Object o) | 檢查此集合中是否包含某個元素 |
boolean equals(Object o) | 比較此集合是否與指定對象相等 |
boolean isEmpty() | 判斷該集合是否為空 |
boolean remove(Object o) | 移除該集合中指定的元素 |
int size() | 擷取該集合元素的個數 |
Object[] toArray() | 将該集合轉換成數組 |
更多方法可查詢 Java API 文檔
List 集合
List 集合繼承自 Collection 集合,将實作了 List 接口的對象稱為 List 集合,在 List 集合中允許出現重複的元素,所有元素是以一種線性方式進行存儲,可以通過索引來通路集合中的指定元素。List 作為 Collection 集合的子接口,不但繼承了 Collection 接口中的全部方法,還增加了一些特有的方法。
方法聲明 | 功能描述 |
---|---|
void add(int index,Object o) | 在清單的指定位置插入指定元素 |
boolean addAll(int index,Collection c) | 将集合中的所有元素添加到List集合的指定位置 |
Object get(int index) | 傳回清單中指定位置的元素 |
int indexOf(Object o) | 傳回對象o在List集合中首次出現的位置索引 |
int lastIndexOf(Object o) | 傳回對象o在List集合中最後一次出現的位置索引 |
Object remove(int index) | 移除清單中指定位置處的元素 |
Object set(int index,Object o) | 傳回用指定元素替換清單中指定位置的元素 |
List subList(int fromIndex,int toIndex) | 傳回fromIndex(包括) 和toIndex(不包括) 之間的集合元素 |
List實作類—ArrayList 集合
ArrayList 是 List 接口的一個實作類,分析 ArrayList 源碼可知,在 ArrayList 内部封裝了一個長度可變的數組對象,存入 ArrayList 集合内的元素實際上是存入了它内部的數組中,當存入的元素超過數組長度時,ArrayList 會在記憶體中配置設定一個更大的數組來存儲這些元素,是以說,可以将 ArrayList 集合看成一個長度可變的數組。 正是由于 ArrayList 内部的資料存儲結構是數組形式,在增加或删除指定位置的元素時,會建立新的數組,效率比較低,不适合做大量的增删,但這種資料結構允許通過索引通路元素,是以,使用它周遊和查找元素時很高效。
ArrayList 實作類中,有一些構造方法
ArrayList() --無參構造,在jdk1.6之前是預設建立一個容量為10的空清單
jdk1.7改為建立容量為0的空清單,原因是如果不存入資料,會一直占用空間
ArrayList(int initialcapacity) --構造具有指定初始容量的空清單
List實作類—Vector 集合
Vector 類實作了可擴充的對象數組。像數組一樣,它包含可以使用整數索引通路的元件。 Vector 的大小可以根據需要增長或縮小,以适應在建立 Vector 之後添加和删除項目。 它是在 jdk1.0的時候出現的,它的底層實作和 ArrayList 是幾乎一樣的,差別在于 Vector 是運作效率慢,線程安全的。
List實作類—LinkedList集合
為了克服在集合中增删元素時效率低的局限性,可以使用 LinkedList 集合。它是一個雙向循環連結清單,連結清單中的每一個元素都使用引用的方式來記住它的前一個元素和後一個元素,進而将元素連接配接起來,它們僅需要記住自己前後的位置即可,LinkedList 類還為在清單的開頭及結尾 get,remove 和 insert 元素提供了統一的命名方法,因為既然是連結清單,那麼它的第一個,和最後一個元素,不管是查詢,增加,删除,都是最快的。是以額外提供以下這些方法。
方法聲明 | 功能描述 |
---|---|
void addFirst(Object o) | 将指定元素插入集合的開頭 |
void addLast(Object o) | 将指定元素添加到集合的結尾 |
Object getFirst() | 傳回集合的第一個元素 |
Object getLast() | 傳回集合的最後一個元素 |
Object removeFirst() | 移除并傳回集合的第一個元素 |
Object removeLast() | 移除并傳回集合的最後一個元素 |
差別
ArrayList 集合查詢快,增删慢,運作效率快,線程不安全(查詢多,增删少的情況下使用)
vector 集合查詢快,增删慢,運作效率慢,線程安全(基本不使用)
LinkedList 集合查詢慢,增删快(增删多,查詢少的情況下使用)