Java の Arrays.copyOf() メソッドは、配列を新しい配列にどのようにコピーしますか?
Java では、配列は非常に一般的なデータ構造であり、Java の Arrays クラスは配列を処理するための便利なメソッドを多数提供します。その中でも、Arrays.copyOf() メソッドは、配列を新しい配列にコピーするのに非常に便利なメソッドです。この記事では、このメソッドの使用法と実装原理を紹介し、具体的なコード例を示します。
使用方法
Arrays.copyOf() メソッドには、元の配列とコピー後の新しい配列の長さという 2 つのパラメーターがあります。このメソッドは、新しい配列を作成し、元の配列から新しい配列に要素をコピーします。元の配列の長さが新しい配列の長さ以上の場合、元の配列の前の部分がコピーされます。元の配列の長さが新しい配列の長さより短い場合、元の配列のすべての要素が新しい配列にコピーされ、残りの要素には配列要素タイプのデフォルト値が入力されます。
次に、Arrays.copyOf() メソッドの呼び出し例を示します。
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, 3);
この例では、5 つの要素を含む整数配列 arr1 を作成します。 Arrays.copyOf() メソッドを呼び出して、arr1 を arr2 という名前の別の配列にコピーし、arr2 の長さを 3 に設定します。配列 arr1 の長さは 5、arr2 の長さは 3 であるため、Arrays.copyOf() メソッドは arr1 の最初の 3 要素のみを arr2 にコピーします。その結果、arr2 には {1, 2, 3} が含まれるようになりました。
これは、Arrays.copyOf() メソッドを使用する最も基本的な例にすぎません。次に、より複雑な使用法と例を見ていきます。
2 次元配列のコピー
Arrays.copyOf() メソッドは、1 次元配列に適しているだけでなく、2 次元配列のコピーにも使用できます。次の例では、matrix1 という名前の 2 次元整数配列を作成し、Arrays.copyOf() メソッドを使用してそれを matrix2 という名前の別の配列にコピーします。 , 3}, {4, 5, 6}};
int[][] matrix2 = Arrays.copyOf(matrix1, 2);
この例では、matrix1 を matrix2 にコピーし、行列の長さ 2 を 2 にします。 matrix1 は 2 次元配列であり、Arrays.copyOf() メソッドは 1 次元配列のみをコピーできるため、長さが 2 の新しい 2 次元配列を作成し、その最初の要素は matrix1 行の最初の要素になります。 、その 2 番目の要素は、matrix1 の 2 番目の行です。このようにして、1 つの 2D 配列を別の配列にコピーできます。
配列の特定の範囲をコピーする
場合によっては、元の配列から要素の特定の範囲のみをコピーしたい場合があります。 Arrays.copyOfRange() メソッドは、元の配列のどのインデックスでコピーを開始し、どのインデックスで終了するかを指定できる非常に便利なメソッドです。以下は Arrays.copyOfRange() メソッドの例です:
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOfRange(arr1 , 1 , 4);
この例では、5 つの要素を含む arr1 という名前の整数配列を作成します。 Arrays.copyOfRange() メソッドを呼び出して、それを arr2 に割り当てます。 arr1 を最初のパラメーターとしてメソッドに渡し、1 と 4 を 2 番目と 3 番目のパラメーターとして渡します。これは、arr1 のインデックス 1 (つまり 2 番目の要素) からインデックス 4 (つまり 5 番目の要素) までのみコピーしたいことを意味します (インデックス 4 は含まれません)。その結果、arr2 には {2, 3, 4} が含まれるようになりました。
Arrays.copyOfRange() メソッドは元の配列の一部のみをコピーするため、この方法で元の配列から特定の範囲の要素をコピーできます。
実装原理
Arrays.copyOf() メソッドは、実際には System.arraycopy() メソッドの簡略化された実装です。 System.arraycopy() メソッドは、配列間で要素をコピーするための Java で最も高速なメソッドの 1 つであり、Arrays.copyOf() メソッドよりも高い柔軟性とパフォーマンスを備えています。さらに、System.arraycopy() メソッドは Arrays.copyOf() メソッドの基本的な実装メソッドでもあります。
以下は Arrays.copyOf() メソッドのソース コード実装です:
public static
return (T[]) copyOf(original, newLength, original.getClass());
}
public static
@SuppressWarnings("unchecked") T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength); System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy;
}
コード実装から、Arrays.copyOf() メソッドの最初の行が copyOf() メソッドのオーバーロードされたバージョンを呼び出し、メソッドによって返された結果を呼び出し元に返していることがわかります。 。このメソッドは、元の配列と新しい配列の長さを引数として受け取り、それらを 2 番目の copyOf() メソッドに渡します。
2 番目の copyOf() メソッドは、次の手順を実行して新しい配列を作成し、要素をコピーします。
Arrays.copyOf() メソッドの実装は System.arraycopy() メソッドに依存しているため、2 つの異なる型にまたがる配列をコピーしないなど、このメソッドの規則と制限に従います。 。
概要
Arrays.copyOf() メソッドは、Java で配列をコピーする便利な方法です。新しい配列をすばやく作成し、元の配列の要素を新しい配列にコピーできます。 。このメソッドは、1 次元および 2 次元の配列をコピーしたり、特定の範囲の要素をコピーしたりするために使用できます。 Arrays.copyOf() メソッドの実装は System.arraycopy() メソッドに基づいているため、同じルールと制限があります。配列を扱う場合、Arrays クラスは配列の処理と操作をより簡単に行うのに役立つ非常に便利なツールです。
以上がJava の Arrays.copyOf() メソッドは、配列を新しい配列にどのようにコピーしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。