一、ArrayList簡介
Java中的ArrayList是一種動態數組,可以實現可變長度的數組功能。ArrayList繼承了AbstractList類,並且實現了List介面,能夠進行快速的元素訪問和簡單的增刪操作。
ArrayList中的元素可以是任意對象,不支持基本數據類型,需要使用其包裝類。ArrayList會自動進行擴容和縮容,對於數據量大或者不確定的情況下,使用ArrayList非常方便。
二、ArrayList的基本使用
要使用ArrayList,需要在代碼中引入java.util包。
import java.util.ArrayList;
創建一個ArrayList對象的方式為:
ArrayList<String> list = new ArrayList<>();
上面的代碼定義了一個元素類型為String的ArrayList對象list,其中<>表示泛型的語法糖,可以在Java7之後自動推導泛型類型,不必在尖括弧中重複定義元素類型。
接下來,我們可以向ArrayList添加元素:
list.add("Java"); list.add("Python"); list.add("C++");
使用add()方法可以添加元素到ArrayList中,支持添加任何對象。如果添加的元素是基本數據類型,則需要使用其包裝類。
獲取ArrayList的元素數量可以使用size()方法:
int size = list.size(); System.out.println("The size of the list is: " + size);
如果要獲取ArrayList中的某個元素,可以使用get()方法並傳入元素索引:
String firstElement = list.get(0); System.out.println("The first element is: " + firstElement);
ArrayList中的索引從0開始,與數組相同。如果獲取超出範圍的元素,將會拋出IndexOutOfBoundsException異常。
刪除ArrayList中的某個元素可以使用remove()方法:
list.remove(1);
上面的代碼刪除了索引為1的元素,也就是第二個元素Python。如果要刪除ArrayList中的所有元素,可以使用clear()方法:
list.clear();
三、ArrayList的遍歷
ArrayList提供了多種遍歷方式,具體可以根據實際需要進行選擇。
1、使用for循環遍歷
for(int i=0; i < list.size(); i++) { String element = list.get(i); System.out.println("Element " + i + ": " + element); }
利用for循環和get()方法可以遍歷ArrayList中的所有元素。index為元素索引,element為元素值。
2、使用foreach循環遍歷
for(String element : list) { System.out.println(element); }
利用foreach循環可以遍歷ArrayList中的所有元素,element為元素值。
3、使用迭代器遍歷
Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { String element = iterator.next(); System.out.println(element); }
利用迭代器可以遍歷ArrayList中的所有元素,next()方法獲取當前位置的元素值,hasNext()方法判斷是否存在下一個元素。
四、ArrayList的排序
要對ArrayList進行排序,首先需要實現Comparator介面,其中的compare()方法用於定義比較規則。
class SortArrayList implements Comparator<String> { public int compare(String s1, String s2) { return s1.compareTo(s2); } }
上面的代碼定義了一個SortArrayList類,實現了Comparator介面,並重寫了compare()方法。在本例子中,我們使用了String類的compareTo()方法來進行字元串的比較。
接下來,使用Collections類的sort()方法對ArrayList進行排序,傳入自定義的比較器對象:
Collections.sort(list, new SortArrayList());
上面的代碼對ArrayList進行了排序,並使用foreach循環輸出了排序後的結果。
for(String element : list) { System.out.println(element); }
五、ArrayList的複製和截取
要對ArrayList進行複製,可以使用clone()方法或者構造一個新的ArrayList對象並將原ArrayList對象傳入構造函數。對於小規模的ArrayList,使用clone()方法更為便利:
ArrayList<String> copyList = (ArrayList<String>)list.clone();
上面的代碼複製了一個ArrayList對象,並將結果保存在copyList中。
對於大規模的ArrayList,使用構造函數相對更為高效:
ArrayList<String> subList = new ArrayList<>(list.subList(1, 4));
上面的代碼截取了從第二個元素(索引為1)起至第四個元素(索引為3)結束的子集合,然後構造一個新的ArrayList對象,並將該子集合作為參數傳遞給構造函數。
六、ArrayList的同步
如果需要對ArrayList進行線程同步,可以使用Collections類中的synchronizedList()方法:
List<String> synchronizedList = Collections.synchronizedList(list);
上面的代碼返回一個線程安全的ArrayList對象,對這個對象進行操作時會自動進行線程同步。
七、代碼示例
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; public class ArrayListDemo { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); int size = list.size(); System.out.println("The size of the list is: " + size); String firstElement = list.get(0); System.out.println("The first element is: " + firstElement); list.remove(1); list.clear(); list.add("Java"); list.add("Python"); list.add("C++"); // 使用for循環遍歷 for(int i=0; i < list.size(); i++) { String element = list.get(i); System.out.println("Element " + i + ": " + element); } // 使用foreach循環遍歷 for(String element : list) { System.out.println(element); } // 使用迭代器遍歷 Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { String element = iterator.next(); System.out.println(element); } // 排序 class SortArrayList implements Comparator<String> { public int compare(String s1, String s2) { return s1.compareTo(s2); } } Collections.sort(list, new SortArrayList()); for(String element : list) { System.out.println(element); } // 複製和截取 ArrayList<String> copyList = (ArrayList<String>)list.clone(); ArrayList<String> subList = new ArrayList<>(list.subList(1, 4)); // 同步 List<String> synchronizedList = Collections.synchronizedList(list); } }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/152789.html