Java ArrayList基本操作及高階用法

ArrayList 類是實現List 介面的類之一,是一個元素個數可變的集合,底層使用陣列實現。

特點:

元素是連續儲存的,每個元素都可以比較快地訪問。

相反,新增或刪除元素可能需要更多的時間。

1 基本操作:

1、建立ArrayList例項

// 資料型別不能為基本型別ArrayList<資料型別> 變數名 = new ArrayList <>();示例:ArrayList list = new ArrayList <>();

由於 ArrayList 是實現 List 介面的類,因此也可以將其建立為 List 物件,如下所示。如果將其建立為 List 物件,那麼在 ArrayList 類中定義的方法將不可用,但在轉換為實現相同 List 介面的類(如

LinkedList

)時將會很方便。

List list = new ArrayList <>();

2、新增元素

要將元素新增到列表的末尾,需要使用 ArryaList 類提供的 add 方法。

public boolean add(E e);

示例如下:

List list = new ArrayList <>();list。add(16);list。add(8);list。add(24);

上面新增元素使用的是基本型別,這其中涉及到

自動裝箱

的過程,可以檢視上一篇文章。

3、指定位置新增元素

在指定位置新增元素,使用add(E e)的過載方法,如下:

// index:要新增的位置索引;element:元素值public void add(int index, E element);

示例:

List list = new ArrayList <>();list。add(“蘋果”);list。add(“香蕉”);list。add(“梨”);// 在索引為1的地方插入元素,由於陣列索引從0開始,因此葡萄為第二個元素list。add (1, “葡萄”);

如果

索引

超出範圍(index <0 ||

index> size()

),那麼將會丟擲IndexOutOfBoundsException(陣列越界),

注意這裡是

>

4、獲取陣列的大小

使用size()方法,如下:

public int size();

示例:

List list = new ArrayList <>();System。out。println(list。size()); // 0list。add(“蘋果”);list。add(“香蕉”);list。add(“梨”);System。out。println(list。size()); // 3

5、獲取陣列的元素

使用get(int index)方法:

public E get(int index);

示例:

List list = new ArrayList <>();list。add(“蘋果”);list。add(“香蕉”);list。add(“梨”);System。out。println(list。get(0)); // “蘋果”System。out。println(list。get(2)); // “梨”System。out。println(list。get(3)); // 提示錯誤:IndexOutOfBoundsException

如果索引

超出範圍(index <0 ||

index >= size()

),那麼會丟擲

IndexOutOfBoundsException,注意這裡是

>=

6、替換元素

使用set(int index, E element)方法:

public E set(int index, E element);

示例:

List list = new ArrayList<>();list。add(“蘋果”);list。add(“香蕉”);list。add(“梨”);list。set (1, “葡萄”);

如果

索引

超出範圍 (index <0 || index >= size()),那麼會丟擲

IndexOutOfBoundsException,注意這裡是

>=

7、刪除指定位置元素

使用remove(int index)方法:

public E remove(int index);

List list = new ArrayList<>();list。add(“蘋果”);list。add(“香蕉”);list。add(“梨”);list。remove (1);

如果

索引

超出範圍 (index <0 || index >= size()),那麼會丟擲

IndexOutOfBoundsException,注意這裡是

>=

8、刪除所有元素

使用clear()方法:

public void clear();

示例:

List list = new ArrayList<>();list。add(“蘋果”);list。add(“香蕉”);list。add(“梨”);list。clear();

9、查詢元素(indexOf、lastIndexOf、contains)

要查詢包含指定物件的列表中的第一個元素,使用 ArryaList 類提供的 indexOf() 方法:

public int indexOf(Object o);

要查詢包含指定物件的列表中的最後一個元素,使用 ArryaList 類提供的

lastIndexOf

() 方法:

public int lastIndexOf(Object o);

要查詢指定物件的列表中是否一個元素,使用 ArryaList 類提供的 contains() 方法:

public boolean contains(Object o)

示例:

List list = new ArrayList <>();list。add(“蘋果”);list。add(“香蕉”);list。add(“梨”);list。add(“香蕉”);System。out。println(list。indexOf(“香蕉”)); // 1System。out。println(list。lastIndexOf(“香蕉”)); // 3System。out。println(list。contains(“香蕉”)); // true

2 高階用法

2。1 新增一個集合中的所有元素

要在一個集合的尾部新增另一個集合中的所有元素,使用addAll(Collection<? extends E> c)方法:

public boolean addAll(Collection<? extends E> c);

要在指定索引新增一個集合中的所有元素,使用addAll(int index, Collection<? extends E> c)方法:

public boolean addAll(int index, Collection<? extends E> c);

示例:

List list1 = new ArrayList<>();list1。add(“蘋果”);list1。add(“香蕉”);List list2 = new ArrayList<>();list2。add(“梨”);list2。add(“葡萄”);list1。addAll(list2); // 集合順序 - 1:蘋果 2:香蕉 3:梨 4:葡萄list1。addAll(1, list2); // 集合順序 - 1:蘋果 2:梨 3:葡萄 4:香蕉

2。2 集合元素去重

集合去重可以搭配Set來解決,如下:

List list = new ArrayList<>();list。add(“蘋果”);list。add(“香蕉”);list。add(“梨”);list。add(“葡萄”);list。add(“蘋果”);list。add(“香蕉”);list。add(“梨”);list。add(“葡萄”);list = new ArrayList<>(new HashSet<>(list));

3.3 集合三種遍歷方式

第一種:隨機訪問,透過索引值去遍歷。

由於ArrayList實現了RandomAccess介面,它支援透過索引值去隨機訪問元素。

String value = null;int size = list。size();for (int i = 0; i < size; i++) { value = list。get(i);}

第二種:for迴圈遍歷。

String value = null;for (String v : list) { value = v;}

第三種:迭代器遍歷。

String value = null;Iterator iter = list。iterator();while (iter。hasNext()) { value = iter。next(); System。out。println(value);}

對集合進行

遍歷刪除

時務必要用迭代器:

Iterator iter = list。iterator();while (iter。hasNext()) { String item = iter。next(); if (item。equals(“香蕉”)) { iter。remove(); }}

遍歷ArrayList時,使用隨機訪問(即,透過索引序號訪問)效率最高,而使用迭代器的效率最低!

3.4 集合排序

集合正序排序使用Collections。sort(List list)方法,

集合倒序使用Collections。reverse(List list)方法,

集合順序打亂使用Collections。shuffle(List list)方法。

示例:

List list = new ArrayList<>();list。add(2);list。add(3);list。add(1);Collections。sort(list); // [1, 2, 3]Collections。reverse(list); // [3, 2, 1]Collections。shuffle(list); // [2, 1, 3]或者其他亂序

3。5 交集、並集、差集

首先準備兩個集合:

List list1 = new ArrayList<>();list1。add(2);list1。add(3);list1。add(1);List list2 = new ArrayList<>();list2。add(3);list2。add(4);list2。add(5);

差集:

list1。removeAll(list2); // list1值為[2, 1]

並集:

list1。removeAll(list2);list1。addAll(list2); // list1值為[2, 1, 3, 4, 5]

交集:

list1。retainAll(list2); // list1值為[3]