在Java開發中,ArrayList是常用的集合類型之一。它具有動態增長數組的功能、支持泛型等特性,可以用來存儲任何類型的對象。
一、基本使用
1、創建ArrayList對象
創建ArrayList對象有兩種方式:
// 第一種方式 List<String> list1 = new ArrayList<String>(); // 第二種方式 ArrayList<String> list2 = new ArrayList<String>();
推薦使用第一種方式,因為它是基於介面編程而不是基於實現類編程。這樣做可以使代碼更加的靈活。
2、添加元素
可以使用add()方法向ArrayList中添加元素,如:
List<String> list = new ArrayList<String>(); list.add("Java"); list.add("Python"); list.add("C++");
3、獲取元素
可以使用get()方法獲取指定位置上的元素,如:
List<String> list = new ArrayList<String>(); list.add("Java"); list.add("Python"); list.add("C++"); System.out.println(list.get(0)); // 輸出Java System.out.println(list.get(1)); // 輸出Python System.out.println(list.get(2)); // 輸出C++
4、更新元素
可以使用set()方法更新指定位置上的元素,如:
List<String> list = new ArrayList<String>(); list.add("Java"); list.add("Python"); list.add("C++"); list.set(1, "PHP"); System.out.println(list.get(1)); // 輸出PHP
5、刪除元素
可以使用remove()方法刪除指定位置上的元素,如:
List<String> list = new ArrayList<String>(); list.add("Java"); list.add("Python"); list.add("C++"); list.remove(1); System.out.println(list.get(1)); // 輸出C++
二、性能分析
1、容量和長度
在向ArrayList中添加元素時,如果ArrayList的容量不足,它會自動擴容,擴容的原理是創建一個新的數組,容量是原來數組的2倍,並將原來數組中的數據複製到新數組中。
但是,每次擴容都會影響性能,因此可以在創建ArrayList時給它指定初始容量。
List<String> list = new ArrayList<String>(10);
這裡指定了初始容量為10。
2、數組擴容的計算方式
在性能分析中,除了容量之外,還需要了解ArrayList的長度。
當ArrayList的容量已滿時,會進行擴容,擴容後的容量是原來的2倍。當然,如果指定了初始容量,就按照指定的初始容量進行擴容。
下面的表格展示了數組長度和容量的關係:
數組長度 | 容量 |
---|---|
0 | 10 |
1 | 10 |
2 | 10 |
4 | 10 |
5 | 10 |
6 | 10 |
7 | 10 |
8 | 10 |
9 | 10 |
10 | 15 |
11 | 15 |
12 | 15 |
14 | 15 |
15 | 22 |
三、多線程應用
1、使用線程安全的集合類
在並發環境下使用ArrayList會存在線程安全問題,因此,應該使用線程安全的集合類如:
List<String> list = Collections.synchronizedList(new ArrayList<String>());
這樣就可以安全的在多個線程中共享ArrayList。
2、使用CopyOnWriteArrayList
CopyOnWriteArrayList是JDK5中提供的線程安全的ArrayList,它是通過在每次修改時都創建一個新的數組來實現線程安全的,因此,在讀取操作時,CopyOnWriteArrayList不需要加鎖,性能比較高。
List<String> list = new CopyOnWriteArrayList<String>();
四、總結
本文介紹了Java ArrayList的基本使用、性能分析和多線程應用等方面。對於需要使用動態增長數組的開發人員來說,ArrayList是一個非常方便的工具,並且具有較好的性能表現。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/185914.html