ホームページ  >  記事  >  Java  >  これは次のように書き換えることができます。 Java配列をコピーするにはどのような方法がありますか?

これは次のように書き換えることができます。 Java配列をコピーするにはどのような方法がありますか?

王林
王林転載
2023-05-09 10:13:081264ブラウズ

はじめに

いわゆる配列のコピーとは、ある配列の要素を別の配列にコピーすることを指します

Java で配列のコピーを実装するには、次の 4 つの方法があります。

  • 元の代入メソッド

  • Arrays クラスの copyOf() メソッド

  • 次の copyOfRange() Arrays クラス Method

  • System クラスの arraycopy() メソッド

  • # Object クラスの clone() メソッド

1. 元の割り当てメソッド

public static void method01(int[] arr, int[] ans) {
		for (int i = 0; i < arr.length; i++) {
			ans[i] = arr[i];
		}
		System.out.println("复制的ans数组为 " + Arrays.toString(ans));
	}

2. copyOf() メソッドを使用します

copyOf() メソッドは、配列を指定された長さにコピーします

Arrays クラスの copyOf() メソッド 構文形式は以下のとおりです。

Arrays.copyOf(dataType[] srcArray,int length);

このうち、 srcArray はコピー対象の配列、 length はコピー対象の配列を表します。コピー後の新しい配列の長さ。

このメソッドを使用して配列をコピーする場合、コピーはデフォルトで元の配列の最初の要素 (インデックス値は 0) から開始され、ターゲット配列の長さは length になります。 length が srcArray.length より大きい場合は、ターゲット配列にデフォルト値が埋められます。length が srcArray.length より小さい場合は、length 要素 (インデックス値は length-1) までコピーされます。

注: ターゲット配列がすでに存在する場合、それは再構築されます。

public static void method02(int[] arr, int[] ans) {
		ans = Arrays.copyOf(arr, arr.length + 3);
		System.out.println("复制的ans数组为 " + Arrays.toString(ans));
	}

3. CopyOfRange() メソッドを使用する

Arrays クラスの CopyOfRange() メソッドは、配列をコピーする別のメソッドです。その構文は次のとおりです:

Arrays.copyOfRange(dataType[] srcArray,int startIndex,int endIndex)

ここで:

  • #srcArray は元の配列を表します。

  • startIndex は、コピーを開始する開始インデックスを示します。ターゲット配列には、開始インデックスに対応する要素が含まれます。また、startIndex は 0 から srcArray.length までの範囲にする必要があります。

  • endIndex は終了インデックスを表します。ターゲット配列には終了インデックスに対応する要素は含まれません。endIndex は startIndex 以上である必要があり、srcArray.length より大きくてもかまいませんsrcArray.length より大きい場合、ターゲット配列のデフォルト値が入力されます。

注: ターゲット配列がすでに存在する場合、それは再構築されます。

public static void method03(int[] arr, int[] ans) {
		ans = Arrays.copyOfRange(arr, 0, arr.length + 3);
		System.out.println("复制的ans数组为 " + Arrays.toString(ans));
	}

4. arraycopy() メソッドを使用する

arraycopy() メソッドは java.lang.System クラスにあり、その構文は次のとおりです。

このうち、srcArray は元の配列を表し、srcIndex は元の配列の開始インデックスを表し、destArray はターゲット配列を表し、destIndex はターゲット配列の開始インデックスを表し、length はコピーされる配列の長さを表します。

このメソッドを使用して配列をコピーする場合、長さ srcIndex は srcArray.length 以下、長さ destIndex は destArray.length 以下である必要があります。

注: ターゲット配列はすでに存在している必要があり、再構築されません。これは、ターゲット配列内の一部の要素を置き換えることと同じです。

System.arraycopy(dataType[] srcArray,int srcIndex,int destArray,int destIndex,int length)

5. clone() メソッドを使用する

clone() メソッドでも配列をコピーできます。このメソッドは Object クラスのメソッドであり、別のメモリ空間を持つオブジェクトを作成できます。配列も Object クラスであるため、配列オブジェクトの clone() メソッドを使用して配列をコピーすることもできます。

clone() メソッドの戻り値は Object 型であるため、適切な型にキャストする必要があります。その構文は比較的単純です:

public static void method03(int[] arr, int[] ans) {
		ans = Arrays.copyOfRange(arr, 0, arr.length + 3);
		System.out.println("复制的ans数组为 " + Arrays.toString(ans));
	}
array_name.clone()

注: 上記のメソッドはすべて浅いコピーです。浅いコピーでは、オブジェクトの参照アドレスのみがコピーされます。2 つのオブジェクトは同じメモリ アドレスを指しているため、いずれかの値が変更されると、もう一方の値もそれに応じて変更されます。ディープ コピーでは、オブジェクトと値がコピーされます。2 つのオブジェクトのいずれかの値が変更されても、もう一方の値は変更されません。

完全なテスト ケース

public static void method05(int[] arr, int[] ans) {
		ans = arr.clone();
		System.out.println("复制的ans数组为 " + Arrays.toString(ans));
	}

出力

元のコピー メソッドによってコピーされた ans 配列is [ 57, 81, 68, 75, 91]

copyOf() メソッドによってコピーされた ans 配列は [57, 81, 68, 75, 91, 0, 0, 0]
コピーされた ans 配列copyOfRange() メソッドにより [57, 81, 68, 75, 91, 0, 0, 0]
arraycopy() メソッドでコピーされた ans 配列は [57, 81, 68, 75, 91]# でコピーされます##clone() メソッド ans 配列は [57, 81, 68, 75, 91]

です

以上がこれは次のように書き換えることができます。 Java配列をコピーするにはどのような方法がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。