CodeGym /Java Blog /Toto sisi /如何在 Java 中向數組添加新元素
John Squirrels
等級 41
San Francisco

如何在 Java 中向數組添加新元素

在 Toto sisi 群組發布
哦,Java 數組。它們是數以百計的初學者軟件開發人員強烈愛恨的對象。向已經初始化的數組添加元素是不可能的,他們說......實際上,這是可能的,但不是經典意義上的......而且它不是很方便。向已初始化的數組添加新元素是一種技巧。然而,這些技巧可以在面試中派上用場……有時在程序員的工作中也能派上用場。為確保您喜歡使用數據類型並知道如何高效地使用它,我們編寫了一份關於向 Java 數組添加新元素的指南。除了仔細閱讀理論和代碼示例外,請務必檢查並完成帖子中的練習題。 如何在 Java 中向數組添加新元素 - 1

Java中的數組是什麼

讓我們回顧一下數組是什麼以及如何在 Java 中創建它。如果您還記得這一點,請隨時跳到下一個副標題“將新元素添加到 Java 數組的 5 種方法”。Oracle 的官方 Java 文檔說數組是屬於同一數據類型的一系列值。一組整數是Java 中數組的完美示例。您定義的所有值在數組中都有一個特定位置,稱為索引。下面是聲明和初始化數組的方法:

int[] myArray = new int[10];
int[] myArray1 = {1, 0, 3, 17, 5, 6, 7, 8, 9, 10}
在第一種情況下,我們定義了一個數組myArray並讓 Java 為 10 個元素的數組分配空間,在第二個myArray1中,我們立即向其中輸入 10 個值。在任何一種情況下,都不能簡單地將元素 11 推入數組。要對數組執行操作,開發人員會操縱數組包含的值的索引。我們應該做什麼?讓我們來看看最常見的添加到數組的方法。

向 Java 數組添加新元素的 5 種方法

好吧,這裡是我們讓不可變看起來可變的技巧。
  • 將數組轉換為列表
  • 創建一個容量更大的新數組,並向數組中添加新元素
  • 實施System.arraycopy()
  • 使用 Apache Commons 複製數組
  • 應用ArrayCopyOf()方法
讓我們仔細看看這些向數組添加元素的方法。

1. 將數組轉換為列表

由於我們不能直接向數組添加新元素,接下來最好的辦法是將它們轉換為列表,添加新元素,然後將值重新轉換回數組。將數組轉換為列表的第一種方法是使用asList()創建一個新的 ArrayList。成功轉換值範圍後,使用ListAdd()插入值。一旦不再需要編輯數組,就可以藉助toArray()方法將其轉換回原始數據類型。對於所有的方法和轉換,一開始這似乎令人困惑。讓我們看一下使用asList()清除問題的示例。

// Code for adding Java arrays to a program
import java.lang.*;
import java.util.*;
 
class ArrayDemo{
   //Let’s add a new element to an array
   public static Integer[] addX(Integer myArray[], int x) {
       int i;
       //turn array into ArrayList using asList() method
       List arrList = new ArrayList( Arrays.asList(myArray));
 
       // adding a new element to the array
       arrList.add(x);
 
       // Transforming the ArrayList into an array
       myArray = arrList.toArray(myArray);
       return myArray;
   }
   public static void main(String[] args) {
       int i;
       //initial array
       Integer myArray[] = { 0, 1, 2, 45, 7, 5, 17};
 
       //print the initial array out
       System.out.println("Initial Array: "
                          + Arrays.toString(myArray));
 
       //element to be added
       int x = 28;
 
       // call the method to add x in myArray
       myArray = addX(myArray, x);
 
       // print the updated array out
       System.out.println("Array with " + x + " added: "
                          + Arrays.toString(myArray));
   }
}
輸出是:
初始數組:[0, 1, 2, 45, 7, 5, 17] 添加 28 的數組:[0, 1, 2, 45, 7, 5, 17, 28]
因此,在程序中我們成功創建了一個包含 7 個值的數組myArray,將其填入並打印出來。然後我們決定十個值對我們來說還不夠。好吧,我們使用Arrays.asList方法將 myArray 轉換為 ArrayList arrList 。這裡是 28,要添加的元素。我們將它添加到 ArrayList arrList中,然後使用toArray()方法將其轉換回數組並打印出新數組。

2.新建一個容量更大的數組

向數組添加更多元素的最常見方法之一是從頭創建一個更大的新數組,放置舊數組的元素並添加新元素。這是該過程的分步演練:
  • 創建一個容量為 a+n 的新數組(a — 原始數組容量,n — 要添加的元素數)。
  • 將先前數據范圍的所有元素以及新值添加到新數據范圍。
  • 打印結果數組。
嘗試自己創建這樣一個數組,並將您的代碼與以下示例中的代碼進行比較:

// Java Program to add an element in an Array

import java.lang.*;
import java.util.*;

class ArrayDemo {
   //Method to add an element x into array myArray
   public static int[] addX(int myArray[], int x) {
       int i;

       // create a new array of a bigger size (+ one element)
       int newArray[] = new int[myArray.length + 1];

       // insert the elements from the old array into the new one
       for (i = 0; i < myArray.length; i++)
           newArray[i] = myArray[i];

       newArray[myArray.length] = x;
       return newArray;
   }

   public static void main(String[] args) {
       int i;

       // initial array of size 10
       int arr[]
               = {0, 1, 2, 45, 7, 5, 17};

       // print the initial array
       System.out.println("Initial Array: " + Arrays.toString(arr));

       // element to be added
       int x = 28;

       // call the addX method to add x in arr
       arr = addX(arr, x);
       // print the updated array
       System.out.println("Array with " + x + " added:" + Arrays.toString(arr));
   }
}
輸出是:
初始數組:[0, 1, 2, 45, 7, 5, 17] 添加 28 的數組:[0, 1, 2, 45, 7, 5, 17, 28]
好吧,這種向數組中添加新元素的方法是最簡單的方法。

3. 應用 System.arrayCopy()

System.arrayCopy()是一種廣泛使用的方法,用於在源數組的目標位置分配更大的數組。開發人員可以在方法的括號中指定他想要復製到新數組的序列。要查看該方法的工作原理並嘗試自己使用它,請查看並嘗試運行下面的示例:

import java.util.Arrays;

class ArrayDemo {
   private static Integer[] addElement(Integer[] myArray, int newElement) {
       //we create a new Object here, an array of bigger capacity 
       Integer[] array = new Integer[myArray.length + 1];
       System.arraycopy(myArray, 0, array, 0, myArray.length);
       array[myArray.length] = newElement;
       return array;
   }

   public static void main(String[] args) {
       Integer[] myArray = {20, 21, 3, 4, 5, 88};
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
       myArray = addElement(myArray, 12);
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
   }
}
輸出是:
添加新元素前的 myArray:[20, 21, 3, 4, 5, 88] 添加新元素前的 myArray:[20, 21, 3, 4, 5, 88, 12]
在這裡,我們創建了一個數組myArray,打印出來並使用我們的addElement方法添加了一個新元素,該方法建立在System.arrayCopy()之上。

4.使用Apache Commons複製數組

讓我們使用一種非標準的方式。即第三方庫 Apache Commons lang。它是 Apache Commons 項目的一部分,專注於可重用 Java 組件的所有方面。有關該項目的知識不會是多餘的。Apache Commons lang 有一個方法add()專門設計用於允許擴展數組,它為代碼編寫者節省了大量時間和精力。值得記住的是,此 Apache Commons add()方法基於調用System.arraycopy()方法,以防您必須回答棘手的考試或面試問題。要將這些庫添加到您的項目中,請訪問Apache Commons網站並下載這些庫。然後轉到 File → Project Structure → Libraries > + 並選擇下載的 jar 文件。

import org.apache.commons.lang3.ArrayUtils;
import java.util.Arrays;

class ArrayDemo {
   private static <T> T[] append(T[] arr, T element) {
       return ArrayUtils.add(arr, element);
   }

   public static void main(String[] args) {
       Integer[] myArray = { 0, 1, 2, 3, 4};
       System.out.println("myArray: " + Arrays.toString(myArray));

       myArray = append(myArray, 5);
       System.out.println("new Array with the number added: " + Arrays.toString(myArray));
   }
}
輸出是:
myArray: [0, 1, 2, 3, 4] 添加數字的新數組:[0, 1, 2, 3, 4, 5]

5. 實現 ArrayCopyOf()

ArrayCopyOf()是另一種向數組添加新元素的方法。例如 Apache Commons lang add()它在內部調用System.arraycopy()來執行此操作。然而,大多數開發人員更喜歡ArrayCopyOf(),因為它允許他們保持代碼簡潔和可讀。下面是使用ArrayCopyOf()向數組添加新元素 的示例:

import java.util.Arrays;
class ArrayDemo {
   private static <X> X[] addElement(X[] myArray, X element) {
       X[] array = Arrays.copyOf(myArray, myArray.length + 1);
       array[myArray.length] = element;
       return array;
   }
   public static void main(String[] args) {
       Integer[] myArray = {20, 21, 3, 4, 5, 88};
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
       myArray = addElement(myArray, 12);
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
   }
}
輸出是:
添加新元素前的 myArray:[20, 21, 3, 4, 5, 88] 添加新元素前的 myArray:[20, 21, 3, 4, 5, 88, 12]

結論

了解如何向數組添加元素有助於開發人員快速更新舊代碼,而不會犧牲其功能和可讀性……或者只是為了通過面試。由於向 Java 數組添加元素的方法多種多樣,請隨意選擇您喜歡的方法。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION