HOWTO · Java
如何在 Java 中將所有陣列元素初始化為零
本文介紹在 Java 中將陣列元素設為零的方法。
本頁內容
新建立的基本數值型別陣列,其元素預設都是零,因此不需要另外初始化。若要將既有陣列重設為零,可以使用 Arrays.fill(),或逐一指定每個元素。參考型別陣列(例如 Integer[])的元素預設則是 null。
陣列初始化是 Java 教學 核心資料路徑的一部分。
使用 for 迴圈將陣列元素初始化為零
for 迴圈會逐一為既有陣列的索引指定值。迴圈從索引 0 開始,並在 numbers.length 之前停止,因此會走訪每個有效元素。
以下完整的 Java 程式會對短陣列套用這些方法,並印出各自的結果:
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class ArrayInitialization {
public static void main(String[] args) {
int[] loopValues = {4, 8, 12};
for (int i = 0; i < loopValues.length; i++) {
loopValues[i] = 0;
}
System.out.println("for loop: " + Arrays.toString(loopValues));
int[] filledValues = {4, 8, 12};
Arrays.fill(filledValues, 0);
System.out.println("fill: " + Arrays.toString(filledValues));
List<Integer> repeatedValues = Collections.nCopies(3, 0);
Integer[] boxedValues = repeatedValues.toArray(new Integer[0]);
System.out.println("boxed values: " + Arrays.toString(boxedValues));
int[] numbers = {4, 8, 12};
int[] oldReference = numbers;
numbers = new int[numbers.length];
System.out.println("replacement: " + Arrays.toString(numbers));
System.out.println("old reference: " + Arrays.toString(oldReference));
int[] generatedValues = {4, 8, 12};
Arrays.setAll(generatedValues, index -> 0);
System.out.println("setAll: " + Arrays.toString(generatedValues));
int[] newValues = new int[3];
System.out.println("new array: " + Arrays.toString(newValues));
}
}
以下是依程式內容推得的預期輸出;本地化版本未另行執行:
for loop: [0, 0, 0]
fill: [0, 0, 0]
boxed values: [0, 0, 0]
replacement: [0, 0, 0]
old reference: [4, 8, 12]
setAll: [0, 0, 0]
new array: [0, 0, 0]
使用 Java 中的 fill() 方法將陣列元素初始化為零
Arrays.fill() 會將指定的值寫入陣列的每個元素。對 基本數值型別陣列而言,Arrays.fill(numbers, 0) 會直接重設原陣列。若只想修改部分元素,也可以使用此方法提供的範圍版本。
使用 nCopies() 方法將陣列元素初始化為零
Collections.nCopies(length, 0) 會傳回一個包含重複包裝型別值的不可變 List<Integer>。透過 toArray(new Integer[0]) 將清單轉換後,得到的是 Integer[],不是 int[],也不會重設既有的基本型別陣列。只有在需要清單或包裝型別陣列時才適合使用這種方式,不能用它取代對原陣列的修改。
在 Java 中透過重新指定參照來將陣列元素初始化為零
指定 new int[numbers.length] 會讓 numbers 指向一個新陣列,其元素使用預設值。若其他變數仍指向原陣列,它們看到的內容不會改變。重新指定只會替換一個參照,不會清除所有參照所指向的舊陣列。
使用 Arrays.setAll() 將陣列元素初始化為零
Arrays.setAll() 會針對每個元素呼叫以索引為依據的產生器,並將產生的值存入陣列。範例中的 index -> 0 會在每個索引都指定相同的值。若值取決於索引,這個方法就很實用;若每個元素都是同一個常數,Arrays.fill() 更直接。
結論
新建立的基本數值型別陣列預設已填入零。若要重設既有陣列,Arrays.fill() 是直接的做法;for 迴圈能明確呈現逐項指定的過程,而 Arrays.setAll() 適合依索引產生值。Collections.nCopies() 會在清單中建立重複的 包裝型別值;重新指定參照則會建立新陣列,其他指向舊陣列的參照仍維持原狀。