如何在 Java 中向一個陣列新增新元素
Hassan Saeed
2023年10月12日
本教程討論如何在 Java 中向陣列新增新元素。
Java 中 Array
是一個容器物件,它可以容納相同資料型別的固定數量的元素。陣列的長度是在宣告陣列物件時定義的,以後不能再更改。
假設我們在 Java 中使用一些值例項化了長度為 5 的陣列:
String[] arr = new String[5];
arr[0] = "1";
arr[1] = "2";
arr[2] = "3";
arr[3] = "4";
arr[4] = "5";
現在需要在陣列中新增第 6 個元素。讓我們嘗試將這第 6 個元素新增到我們的陣列中。
arr[5] = "6";
上面這行程式碼給出了以下錯誤。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
這是因為我們最初宣告陣列的大小是 5 而我們試圖新增第 6 個元素到陣列中。
不用擔心,有兩種可能的解決方案來完成這個任務。我們可以使用 ArrayList
代替陣列,或者建立一個新的更大的陣列來容納新元素。
使用一個 ArrayList
一個更好的、值得推薦的解決方案是使用 ArrayList
代替陣列,因為它是可調整大小的。ArrayList
沒有固定的大小,因此每當需要新增一個新元素時,你可以通過執行 testList.add(element)
來簡單地新增。
import java.util.*;
public class Main {
public static void main(String args[]) {
List<String> testList = new ArrayList<String>();
testList.add("1");
testList.add("2");
testList.add("3");
testList.add("4");
testList.add("5");
// Print the original list
System.out.println("Initial ArrayList:\n" + testList);
// Add elements without running into any error
testList.add("6");
testList.add("7");
// Print the list after adding elements
System.out.println("Modified ArrayList:\n" + testList);
}
}
以上程式碼輸出如下。
Initial ArrayList : [ 1, 2, 3, 4, 5 ] Modified ArrayList : [ 1, 2, 3, 4, 5, 6, 7 ]
或者如果我們已經有一個陣列,也可以直接建立一個 ArrayList
。
import java.util.*;
public class Main {
public static void main(String args[]) {
// Create an array
String[] arr = new String[1];
arr[0] = "1";
// Convert to ArrayList
List<String> testList = new ArrayList<>(Arrays.asList(arr));
// Print the original list
System.out.println("Initial ArrayList:\n" + testList);
// Add elements to it
testList.add("2");
testList.add("3");
// Print the list after adding elements
System.out.println("Modified ArrayList:\n" + testList);
}
}
上面的程式碼輸出如下。
Initial ArrayList : [ 1 ] Modified ArrayList : [ 1, 2, 3 ]
我們可以很方便的將 ArrayList
轉換回陣列。
import java.util.*;
public class Main {
public static void main(String args[]) {
// Create an array
String[] arr = new String[1];
arr[0] = "1";
// Convert to ArrayList
List<String> testList = new ArrayList<>(Arrays.asList(arr));
// Add elements to it
testList.add("2");
testList.add("3");
// Convert the arraylist back to an array
arr = new String[testList.size()];
testList.toArray(arr);
}
}
建立一個新的較大的陣列
如果我們堅持只使用陣列,我們可以使用 java.util.Arrays.copyOf
方法來建立一個更大的陣列並容納一個新元素。讓我們使用上面建立的陣列 arr
,並在下面的例子中向它新增一個新元素。
import java.util.*;
public class Main {
public static void main(String args[]) {
// Create an array
String[] arr = new String[5];
arr[0] = "1";
arr[1] = "2";
arr[2] = "3";
arr[3] = "4";
arr[4] = "5";
// print the original array
System.out.println("Initial Array:\n" + Arrays.toString(arr));
// Steps to add a new element
// Get the current length of the array
int N = arr.length;
// Create a new array of length N+1 and copy all the previous elements to this new array
arr = Arrays.copyOf(arr, N + 1);
// Add a new element to the array
arr[N] = "6";
// print the updated array
System.out.println("Modified Array:\n" + Arrays.toString(arr));
}
}
上面的程式碼輸出如下。
Initial Array : [ 1, 2, 3, 4, 5 ] Modified Array : [ 1, 2, 3, 4, 5, 6 ]
如果以後我們覺得需要在 arr
中新增另一個元素,我們將不得不再次重複上面的程式碼塊!
因此不推薦這種解決方案,因為每增加一個新元素都有一個 O(n)
的時間複雜度,因為它必須將所有元素從前一個陣列複製到一個新的陣列。另一方面,使用 ArrayList
增加每一個新元素,每次操作的攤銷成本為 O(1)
。