CodeGym /Java Blog /ランダム /Java で配列に新しい要素を追加する方法
John Squirrels
レベル 41
San Francisco

Java で配列に新しい要素を追加する方法

ランダム グループに公開済み
ああ、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を定義し、10 要素の配列にスペースを割り当てるように Java を作成しました。2 番目の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 を正常に作成し、それを入力して出力しました。そして、10 個の値では十分ではないと判断しました。さて、 Arrays.asListメソッドを使用して myArray を ArrayList arrList に変換しました。こちらは追加する要素の28です。これを ArrayList arrListに追加し、 toArray()メソッドを使用して配列に変換し直し、新しい配列を出力しました。

2. より大きな容量の新しいアレイを作成します

配列に要素を追加する最も一般的な方法の 1 つは、新しい、より大きな配列を最初から作成し、古い配列の要素を配置し、新しい要素を追加することです。プロセスを段階的に説明します。
  • 容量 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を作成し、それを出力し、 System.arrayCopy()に基づいて構築されたaddElementメソッドを使用して新しい要素を追加しました。

4. Apache Commons を使用して配列をコピーする

標準以外の方法を使用してみましょう。つまり、サードパーティ ライブラリの Apache Commons lang です。これは、再利用可能な Java コンポーネントのあらゆる側面に焦点を当てた Apache Commons プロジェクトの一部です。プロジェクトに関する知識は不要ではありません。Apache Commons lang には、配列の拡張を可能にするために特別に設計されたメソッドadd()があり、コード作成者の時間と労力を大幅に節約します。難しい試験や面接の質問に答えなければならない場合に備えて、この Apache Commons add()メソッドはSystem.arraycopy()メソッドの呼び出しに基づいていることに留意してください。ライブラリをプロジェクトに追加するには、Apache Commons Web サイトに移動し、ライブラリをダウンロードします。次に、「ファイル」→「プロジェクト構造」→「ライブラリ」→「+」に移動し、ダウンロードした 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() は、配列に新しい要素を追加するもう 1 つのメソッドです。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