[TOC]
## **第1部分 ArrayList簡介**
ArrayList是基于數組實現的,是一個動態數組,其容量能自動增長,類似于C語言中的動態申請內存,動態增長內存。
<br>
ArrayList不是線程安全的,只能在單線程環境下,多線程環境下可以考慮用collections.synchronizedList(List l)函數返回一個線程安全的ArrayList類,也可以使用concurrent并發包下的CopyOnWriteArrayList類。
<br>
ArrayList實現了Serializable接口,因此它支持序列化,能夠通過序列化傳輸,實現了RandomAccess接口,支持快速隨機訪問,實際上就是通過下標序號進行快速訪問,實現了Cloneable接口,能被克隆。
<br>
<br>
### **ArrayList與Collection關系如下圖**:
:-: 
<br>
### **ArrayList實現原理:**
:-: 
<br>
<br>
### **ArrayList基本語法:**
`ArrayList 類位于 java.util 包中,使用前需要引入它,語法格式如下:`
```
import java.util.ArrayList; // 引入 ArrayList 類
```
```
ArrayList<E> objectName =new ArrayList<>(); // 初始化
```
* **E**: 泛型數據類型,用于設置 objectName 的數據類型,**只能為引用數據類型**。
* **objectName**: 對象名。
ArrayList 是一個數組隊列,提供了相關的添加、刪除、修改、遍歷等功能。
<br>
<br>
## **第2部分 ArrayList添加元素**
ArrayList 類提供了很多有用的方法,添加元素到 ArrayList 可以使用 add() 方法:
```
import java.util.ArrayList;
public class day01Arraylist01{
public static void main(String []agrs){
ArrayList<String> sites = new ArrayList<String>();
sites.add("Python人生苦短");
sites.add("java一切皆對象");
sites.add("Golang你倆說的對");
System.out.println(sites);
}
}
```
**運行結果:**
`[Python人生苦短, java一切皆對象, Golang你倆說的對]`
<br>
<br>
## **第3部分 ArrayList訪問元素**
訪問 ArrayList 中的元素可以使用 get() 方法:
```
import java.util.ArrayList;
public class day01Arraylist01{
public static void main(String []agrs){
ArrayList<String> sites = new ArrayList<String>();
sites.add("Python人生苦短");
sites.add("java一切皆對象");
sites.add("Golang你倆說的對");
System.out.println(sites);
// 訪問第二個元素
System.out.println(sites.get(2));
}
}
```
**運行結果:**
Golang你倆說的對
**注意**:數組的索引值從 0 開始。
<br>
<br>
## **第5部分 toArray()修改元素**
如果要修改 ArrayList 中的元素可以使用 set() 方法:
```
import java.util.ArrayList;
public class day01Arraylist01{
public static void main(String []agrs){
ArrayList<String> sites = new ArrayList<String>();
sites.add("Python人生苦短");
sites.add("java一切皆對象");
sites.add("Golang你倆說的對");
sites.set(1,"MYSQL");// 第一個參數為索引位置,第二個是要修改的值
System.out.println(sites);
}
}
```
**運行結果:**
`[Python人生苦短, MYSQL, Golang你倆說的對]`
<br>
<br>
## **第6部分 ArrayList刪除元素**
如果要刪除 ArrayList 中的元素可以使用 remove() 方法:
```
import java.util.ArrayList;
public class day01Arraylist01{
public static void main(String []agrs){
ArrayList<String> sites = new ArrayList<String>();
sites.add("Python人生苦短");
sites.add("java一切皆對象");
sites.add("Golang你倆說的對");
sites.remove(1); // 通過索引刪除元素,這里刪除的是第一個
System.out.println(sites);
}
}
```
**運行結果:**
`[Python人生苦短, Golang你倆說的對]`
<br>
<br>
## **第6部分 ArrayList示例**
### 計算大小
如果要計算 ArrayList 中的元素數量可以使用 size() 方法:
```
import java.util.ArrayList;
public class day01Arraylist01{
public static void main(String []agrs){
ArrayList<String> sites = new ArrayList<String>();
sites.add("Python人生苦短");
sites.add("java一切皆對象");
sites.add("Golang你倆說的對");
System.out.println(sites.size());
}
}
```
**運行結果:**
3
<br>
<br>
### 迭代數組列表
我們可以使用 for 來迭代數組列表中的元素:
```
import java.util.ArrayList;
public class day01Arraylist01{
public static void main(String []agrs){
ArrayList<String> sites = new ArrayList<String>();
sites.add("Python人生苦短");
sites.add("java一切皆對象");
sites.add("Golang你倆說的對");
for(int i = 0;i < sites.size();i++){
System.out.println(sites.get(i));
}
}
}
```
**運行結果:**
Python人生苦短
java一切皆對象
Golang你倆說的對
<br>
也可以使用 for-each 來迭代元素:
```
import java.util.ArrayList;
public class day01Arraylist01{
public static void main(String []agrs){
ArrayList<String> sites = new ArrayList<String>();
sites.add("Python人生苦短");
sites.add("java一切皆對象");
sites.add("Golang你倆說的對");
for (String i : sites){
System.out.println("我是each");
System.out.println(i);
}
}
}
```
**運行結果:**
我是each
Python人生苦短
我是each
java一切皆對象
我是each
Golang你倆說的對
<br>
<br>
### 其他的引用類型
ArrayList 中的元素實際上是對象,在以上實例中,數組列表元素都是字符串 String 類型。
<br>
如果我們要存儲其他類型,而 只能為引用數據類型,這時我們就需要使用到基本類型的包裝類。
<br>
### 基本類型對應的包裝類表如下:
| 基本類型 | 引用類型 |
| --- | --- |
| boolean | Boolean |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
此外,BigInteger、BigDecimal 用于高精度的運算,BigInteger 支持任意精度的整數,也是引用類型,但它們沒有相對應的基本類型。
```
ArrayList<Integer> li=new Arraylist<>(); // 存放整數元素
ArrayList<Character> li=new Arraylist<>(); // 存放字符元素
```
<br>
<br>
以下實例使用 ArrayList 存儲數字(使用 Integer 類型):
```
import java.util.ArrayList;
public class day02ArrayList02{
public static void main(String [] args){
ArrayList<Integer> nums = new ArrayList<Integer>();
nums.add(10);
nums.add(9);
nums.add(8);
nums.add(7);
nums.add(6);
nums.add(6);
for(int i : nums){
System.out.println(i);
}
}
}
```
**運行結果:**
10
9
8
7
6
6
<br>
### ArrayList 排序
Collections 類也是一個非常有用的類,位于 java.util 包中,提供的 sort() 方法可以對字符或數字列表進行排序。
以下實例對數字進行排序:
```
import java.util.ArrayList;
import java.util.Collections; // 引入 Collections 類
public class day02ArrayList02{
public static void main(String [] args){
ArrayList<Integer> nums = new ArrayList<Integer>();
nums.add(10);
nums.add(9);
nums.add(12);
nums.add(7);
nums.add(6);
nums.add(6);
Collections.sort(nums);// 排序
for(int i : nums){
System.out.println(i);
}
}
}
```
**運行結果:**
6
6
7
9
10
12
<br>
以下實例對字母進行排序:
```
import java.util.ArrayList;
import java.util.Collections; // 引入 Collections 類
public class day02ArrayList02{
public static void main(String [] args){
ArrayList<String> nums = new ArrayList<String>();
nums.add("Golang");
nums.add("java");
nums.add("Python");
nums.add("C++");
nums.add("C");
nums.add("JS");
Collections.sort(nums);// 排序
for(String i : nums){
System.out.println(i);
}
}
}
```
**運行結果:**
C
C++
Golang
JS
Python
java
<br>
<br>
## **第7部分 ArrayList 方法集合**
Java ArrayList 常用方法列表如下:
| 方法 | 描述 |
| --- | --- |
| [add()]() | 將元素插入到指定位置的 arraylist 中 |
| [addAll()]() | 添加集合中的所有元素到 arraylist 中 |
| [clear()]() | 刪除 arraylist 中的所有元素 |
| [clone()]() | 復制一份 arraylist |
| [contains()]() | 判斷元素是否在 arraylist |
| [get()]() | 通過索引值獲取 arraylist 中的元素 |
| [indexOf()]() | 返回 arraylist 中元素的索引值 |
| [removeAll()]() | 刪除存在于指定集合中的 arraylist 里的所有元素 |
| [remove()]() | 刪除 arraylist 里的單個元素 |
| [size()]() | 返回 arraylist 里元素數量 |
| [isEmpty()]() | 判斷 arraylist 是否為空 |
| [subList()]() | 截取部分 arraylist 的元素 |
| [set()]() | 替換 arraylist 中指定索引的元素 |
| [sort()]() | 對 arraylist 元素進行排序 |
| [toArray()]() | 將 arraylist 轉換為數組 |
| [toString()]() | 將 arraylist 轉換為字符串 |
| [ensureCapacity]() | 設置指定容量大小的 arraylist |
| [lastIndexOf()]() | 返回指定元素在 arraylist 中最后一次出現的位置 |
| [retainAll()]() | 保留 arraylist 中在指定集合中也存在的那些元素 |
| [containsAll()]() | 查看 arraylist 是否包含指定集合中的所有元素 |
| [trimToSize()]() | 將 arraylist 中的容量調整為數組中的元素個數 |
| [removeRange()]() | 刪除 arraylist 中指定索引之間存在的元素 |
| [replaceAll()]() | 將給定的操作內容替換掉數組中每一個元素 |
| [removeIf()]() | 刪除所有滿足特定條件的 arraylist 元素 |
| [forEach()]() | 遍歷 arraylist 中每一個元素并執行特定操作 |
<br>
<br>
### 1:clear( )方法實例演示
clear() 方法用于刪除動態數組中的所有元素。
clear() 方法的語法為:
```
arraylist.clear()
```
**注:** arraylist 是 ArrayList 類的一個對象。
**參數說明:**
* 無
```
import java.util.ArrayList;
public class day03ArrayList03{
public static void main(String []args){
// 創建一個數組
ArrayList<String> nums = new ArrayList<>();
nums.add("Python");
nums.add("Java");
nums.add("Golnag");
nums.add("C++");
System.out.println("It常用語言有:"+nums);
// 刪除所有元素
nums.clear();
System.out.println("clear后的結果是:"+nums);
}
}
```
**運行結果:**
`It常用語言有:[Python, Java, Golnag, C++]`
`clear后的結果是:[ ]`
<br>
在上面的實例中,我們創建了一個名為 nums 的動態數組。該動態數組存儲這編程語言的名稱。
實例最后,我們使用 clear() 方法刪除了動態數組 nums 的所有元素。
<br>
<br>
### 2:clear() 與 removeAll( ) 方法
接下來我們正好可引入另一個方法[isEmpty()]()判斷是否為空,這次刪除是使用 removeAll
在動態數組中還提供了 removeAll() 方法,它同樣能刪除數組中的所有元素,如下:
```
import java.util.ArrayList;
public class day04ArrayList04{
public static void main(String[]args){
// 創建一個動態數組
ArrayList <Integer> nums = new ArrayList<>();
// 添加元素
nums.add(12);
nums.add(43);
nums.add(21);
nums.add(54);
System.out.println("removeAll() 前:" + nums);
// 刪除所有元素
nums.removeAll(nums);
System.out.println("removeAll() 后:" + nums);
if(nums.isEmpty()){//判斷是否為空
System.out.println("你盡然把它全刪了!嗚嗚嗚");
}
}
}
```
**運行結果:**
removeAll() 前:[12, 43, 21, 54]
removeAll() 后:[]
你盡然把它全刪了!嗚嗚嗚
我們創建了一個名為 nums 的動態數組,然后使用 removeAll() 方法刪除數組中所有的元素。
removeAll() 和 clear() 方法功能都是一樣都。但是 clear() 方法的比 removeAll() 更常被用到,因為 clear() 比 removeAll() 更快,更高效。
<br>
<br>
### 3:remove()方法案例演示
remove() 方法用于刪除動態數組里的單個元素。
remove() 方法的語法為:
// 刪除指定元素
```
arraylist.remove(Object obj)
```
// 刪除指定索引位置的元素
```
arraylist.remove(int index)
```
**注:** arraylist 是 ArrayList 類的一個對象。
**參數說明:**
* obj - 要刪除的元素
* index - 要刪除元素索引值
如果 obj 元素出現多次,則刪除在動態數組中最第一次出現的元素。
<br>
#### 3.1:返回值
如果傳入元素,刪除成功,則返回 true。
如果傳入索引值,則返回刪除的元素。
注意:如果指定的索引超出范圍,則該方法將拋出 IndexOutOfBoundsException 異常。
<br>
#### 3.2:實例——從數組中刪除指定的元素:【數字】
```
import java.util.ArrayList;
public class day04ArrayList04{
public static void main(String[]args){
// 創建一個動態數組
ArrayList <Integer> nums = new ArrayList<>();
// 添加元素
nums.add(12);
nums.add(43);
nums.add(21);
nums.add(54);
System.out.println("remove() 前:" + nums);
// 刪除單個元素,通過下標
nums.remove(1);
System.out.println("remove() 后:" + nums);
if(nums.isEmpty()){//判斷是否為空
System.out.println("你盡然把它全刪了!嗚嗚嗚");
}
}
}
```
**運行結果:**
remove() 前:[12, 43, 21, 54]
remove() 后:[12, 21, 54]
<br>
#### 3.3:實例——從數組中刪除指定的元素:【字母】
```
import java.util.ArrayList;
public class day04ArrayList04{
public static void main(String[]args){
// 創建一個動態數組
ArrayList <String> nums = new ArrayList<>();
// 添加元素
nums.add("一");
nums.add("二");
nums.add("三");
nums.add("四");
System.out.println("remove() 前:" + nums);
// 刪除單個元素,通過下標
nums.remove("四");
System.out.println("remove() 后:" + nums);
}
}
```
**運行結果:**
remove() 前:[一, 二, 三, 四]
remove() 后:[一, 二, 三]
<br>
<br>
#### 3.4:實例——刪除第一次出現的元素:
```
import java.util.ArrayList;
class day05ArrayList05{
public static void main(String[]args){
ArrayList <Integer> nums = new ArrayList<>();
nums.add(23);
nums.add(56);
nums.add(45);
nums.add(23);
nums.add(78);
nums.add(98);
nums.add(34);
System.out.println("init array :" + nums);
// 刪除第一個次出現的23的元素
boolean result = nums.remove(Integer.valueOf(23));
System.out.println("23被刪除了嗎?" + result);
System.out.println("使用remove后:" + nums);
}
}
```
**運行結果:**
init array :[23, 56, 45, 23, 78, 98, 34]
23被刪除了嗎?true
使用remove后:[56, 45, 23, 78, 98, 34]
<br>
我們創建了一個名為 nums 的動態數組。在這個數組中,元素 23 出現了兩次,注意這一行:
~~~
nums.remove(Integer.valueOf(23))
~~~
Integer.valueOf()將 23 從 int 類型轉變成一個 Integer 對象。因為 remove() 方法僅將對象作為其參數。
remove()用于刪除第一個出現在數組中的 23。
<br>
<br>
### 4:set() 方法
set() 方法用于替換動態數組中指定索引的元素。
set() 方法的語法為:
```
arraylist.set(int index, E element)
```
**注:** arraylist 是 ArrayList 類的一個對象。
**參數說明:**
* index - 索引位置
* element - 將在 index 位置替換進去的新元素
<br>
#### 4.1:返回值
返回之前在 index 位置的元素 。
如果 index 值超出范圍,則拋出 IndexOutOfBoundsException 異常。
<br>
#### 4.2:實例
替換動態數組中的某元素:
```
importjava.util.ArrayList;
classMain{
publicstaticvoidmain(String[]args){
// 創建一個動態數組
? ? ? ? ArrayList nums = new ArrayList<>();
? ? ? ? sites.add("hhh");
? ? ? ? sites.add("www");
? ? ? ? sites.add("ooo");
System.out.println(">>>: "+ nums);
// 索引 2 的元素被替換
Stringelement=nums.set(2,"Wiki");
System.out.println("替換后: "+nums);
System.out.println("被替換的元素: "+element);
}
}
```
在上面的實例中,我們創建了一個名為 nums 的數組,set() 方法將索引位置為 2 的 ooo 替換成 Wiki。
注意:如果不確定元素的索引值,可以使用 ArrayList indexOf() 方法。
### ArrayList set() 與 add()方法
add() 和 set() 方法的語法看起來非常相似。
```
// add() 的語法
arraylist.add(int index, E element)
// set() 的語法
arraylist.set(int index, E element)
```
這兩種方法都將新元素添加到數組中。
但是,它們之間有很大的不同:
* set() 方法在指定位置對元素進行更新。
* add() 方法將元素插入到指定位置的動態數組中。
```
import java.util.ArrayList;
class Main{
public static void main(String[]args){
// 創建一個動態數組
? ? ? ? ArrayList nums = new ArrayList<>();
? ? ? ? sites.add("hhh");
? ? ? ? sites.add("www");
? ? ? ? sites.add("ooo");
System.out.println(">>>: "+nums);
// 創建另一個 nums2 動態數組
? ? ? ? ArrayList nums2 = new ArrayList<>();
// 將 nums 中的數組元素添加到 nums2
? ? ? ? nums2.addAll(nums);
System.out.println("ArrayList: " + nums);
// 使用set()
? ? ? ? sites.set(1,"Wiki");
System.out.println("ArrayList 使用 set() 后: "+ nums);
//使用 add()
? ? ? ? nums2.add(1,"Wiki");
System.out.println("ArrayList 使用 add() 后: "+nums2);
}
}
```
- Java自動化測試
- 第一章:Java:基礎內容
- 1.1:Java:Hello Word
- 1.2:Java:熱身
- 1.3:Java:注釋
- 1.4:Java:標識符
- 1.5:Java:常量
- 1.6:Java:基本數據類型
- 1.7:Java:引用類型
- 1.8:Java:String類
- 第二章:Java:運算符
- 2.1:Java:算數運算符
- 2.2:Java:關系運算符
- 2.3:Java:邏輯運算
- 2.4:Java:賦值運算符
- 2.5;Java:三元運算符
- 2.6:Java:位運算符
- 第三章:Java:循環控制語句
- 3.1:Java:for循環
- 3.2:Java:while循環
- 3.3:Java:switch
- 3.4:Java:if else
- 3.5:Java:練習題
- 第四章:Java:函數與全局/局部變量
- 4.1:Java:局部變量
- 4.2:Java:全局變量
- 第五章:Java:方法
- 5.1:Java:初識方法
- 5.2:Java:方法調用
- 5.3:Java:方法重載
- 5.4:Java:構造方法
- 5.5:Java:方法的注意事項
- 第六章:Java:面向對象
- 6.1:Java:小案例
- 6.2:Java:this 關鍵字
- 6.3:Java:super 關鍵字
- 6.4:Java:static 關鍵字
- 6.5:Java:final關鍵字
- 6.6:Java:instanceof 運算符
- 6.7:Java:面向對象之封裝
- 6.8:Java:面向對象之繼承
- 6.9:Java:面向對象之多態
- 第七章:Java:面向對象高級進階
- 7.1:Java:抽象類
- 7.2:Java:Java中String類
- 7.3:Java:interface接口
- 7.4:Java:ArrayList
- 7.5:Java:HashSet
- 7.6:Java:HashMap
- 7.7:Java:反射(reflection)
- 第八章:Java:日志以及異常捕獲
- 8.1:Java:log4j
- 8.2:Java:異常初識基礎
- 8.3:Java:未被捕獲的異常
- 8.4:Java:try和catch的使用
- 8.5:Java:多重catch語句的使用
- 8.6:Java:throws/throw 關鍵字
- 8.7:Java:finally關鍵字
- 8.8:Java:自定義異常
- 第九章:Java:xml and IO
- 9.1:Java:IO基本概念
- 9.2:java:properties
- 9.3:Java:xml基本介紹
- 9.4:Java:xml操作實例
- 第十章:Java:JDBC編程
- 10.1:Java:JDBC介紹
- 10.2:Java:JDBC查詢
- 10.3:Java:JDBC插入
- 10.4:Java:Batch
- 10.5:Java:JDBC連接池
- 第十一章:Java:TestNG
- 11.1:java:TestNG簡介
- 11.2:Java:TestNG小實例
- 11.3:Java:TestNG.xml文件配置
- 11.4:Java:TestNG基本注解
- 11.5:Java:TestNG注解代碼
- 11.6:Java:TestNG預期異常
- 11.7:Java:TestNG忽略測試
- 11.8:Java:TestNG超時測試
- 11.9:Java:TestNG分組測試