集合的概述
Java中的集合像是一個容器,用來存儲 Java 對象(實際上是對象的引用),這些對象可以是任意的數據類型,並且長度是可變的。集合都位於 java.util 包中。集合按照存儲結構可以分爲兩大類,Collection集合與Map集合。
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 集合查詢慢,增刪快(增刪多,查詢少的情況下使用)