Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで配列をコピーする4つの方法

Javaで配列を操作しているときに、配列のコピーを作成することを決定する場合があります。たとえば、コーヒーショップを経営していて、季節のメニューを作成したい場合は、新しいメニューのベースとなる元のメニューのコピーを作成することができます。

Javaでは、配列をコピーする方法がいくつかあります。このチュートリアルでは、配列をコピーするための4つの一般的な方法を検討し、それらが行ごとにどのように機能するかについて説明します。このチュートリアルを読むと、Javaで配列をコピーするマスターになります。

Javaアレイ

Javaでは、配列は1つの単一の型を保持する値を保持するコンテナです。たとえば、配列を使用して、本のリストや、ダーツのゲームでプレーヤーが獲得したスコアのリストを格納できます。

配列は、すべてを1つのコレクションに格納できるため、多くの同様の値を処理する場合に役立ちます。これにより、コードを凝縮し、同じメソッドを同じような値で一度に実行することができます。

コーヒーショップで販売されたコーヒーを格納する配列を作成するとします。このコードを使用してこれを行うことができます。

String[] coffees = {“Espresso”, “Mocha”, “Latte”, “Cappuccino”, “Pour Over”, “Flat White”};

この例では、coffeesという配列を宣言します。 文字列値を格納します。配列には6つの値が含まれています。

配列内の各アイテムには、0から始まるインデックス番号が割り当てられます。これを使用して、配列内のアイテムを個別に参照できます。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

Java配列の基本について説明したので、配列の内容をコピーするために使用できるメソッドについて説明します。

代入演算子を使用して配列をコピー

配列のコピーに使用される最も一般的なクローンメソッドの1つは、代入演算子を使用することです。

代入演算子は、配列に値を代入するために使用されます。代入演算子を使用すると、既存の配列の内容を新しい変数に割り当てることができます。これにより、既存の配列のコピーが作成されます。

コーヒーショップに戻りましょう。 coffeesのコピーを作成するとします。 夏のコーヒーメニューのベースとなる配列。このコードを使用して、配列のコピーを作成できます。

class CopyAssignment {
	public static void main(String[] args) {
		String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};
		String[] summer_coffees = coffees;

		for (String c: summer_coffees) {
			System.out.print(c + ",");
		}
	}
}

私たちのコードは次を返します:

Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White,

コードを分解してみましょう。 CopyAssignmentクラス内のコードの最初の行で、coffeesという配列を宣言します。 標準のコーヒーメニューを保存します。

次の行では、代入演算子を使用してcoffeesの値を代入します。 summer_coffeesという新しい配列に 。次に、summer_coffees内のすべてのアイテムを反復処理する「for-each」ループを作成します。 配列してコンソールに出力します。

この方法を使用することには1つの欠点があります。一方の配列の要素を変更すると、もう一方の配列も変更されます。したがって、Latteの値を変更した場合 Summer Lattesummer_coffeesで リスト、私たちのcoffees リストも変更されます。

ループして配列をコピーする

配列をコピーするために説明した最初のアプローチ(代入演算子を使用)は、いわゆるshallow copy.を作成します。 これは、既存の配列オブジェクトを新しいオブジェクトに割り当てたためです。つまり、オブジェクトを変更すると、両方が変更されます。つまり、2つのオブジェクトがリンクされます。

ただし、多くの場合、ディープコピーを作成する必要があります。ディープコピーは、既存のオブジェクトから値をコピーし、新しい配列オブジェクトを作成します。ディープコピーを作成すると、元の配列に影響を与えることなく、新しい配列を変更できます。

ディープコピーを作成するために使用できる1つのアプローチは、forを作成することです。 配列の内容を反復処理して新しい配列を作成するループ。

coffeesのディープコピーを作成するとします。 summer_coffees.という配列 summer_coffeesの内容を変更する予定なので、これはディープコピーである必要があります。 夏に提供する新しいコーヒーを反映する配列。

forを使用してディープコピーを作成するために使用するコードは次のとおりです。 ループ:

import java.util.Arrays;

class LoopCopy {
	public static void main(String[] args) {
		String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};
		String[] summer_coffees = new String[6];

		for (int i = 0; i < coffees.length; ++i) {
			summer_coffees[i] = coffees[i];
		}

		System.out.println(Arrays.toString(summer_coffees));
	}
}

コードを実行すると、出力は次のようになります。

[Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]

ご覧のとおり、コードによって元の配列のコピーが作成されています。それがどのように機能するかを段階的に説明しましょう。

  1. java.util.Arraysをインポートします これにはtoString()メソッドが含まれており、例の最後に配列をコンソールに出力するために使用します。
  1. coffeesという配列を宣言します 標準メニューにコーヒーのリストを保存します。
  2. summer_coffeesという配列を初期化します 6つの値を格納します。
  3. forループを使用して、coffees内のすべてのアイテムを反復処理します リスト。
  4. forループが実行されるたびに、インデックス値iのアイテム summer_coffeesには、インデックス値iのアイテムが割り当てられます。 コーヒーで。
  5. Arrays.toString()を使用してsummer_coffeesを変換します 文字列に変換し、コピーした要素を含む新しい配列をコンソールに出力します。

copyOfRange()Javaメソッドの使用

JavaのcopyOfRange()メソッドは、Arraysをコピーするために使用されます。copyOfRange()は、java.util.Arraysクラスの一部です。 copyOfRange()メソッドの構文は次のとおりです。

import java.util.arrays;

DataType[] newArray = Arrays.copyOfRange(oldArray, indexPos, length);

copyOfRange()メソッドの構文を分解してみましょう。

  1. データ型 新しい配列が格納するデータのタイプです。
  2. newArray 新しいアレイの名前です。
  3. oldArray 値をnewArrayにコピーする配列です 。
  4. indexPos oldArrayでコピー操作を開始する位置です。 。
  5. 長さ oldArrayからコピーする必要のある値の数です newArrayへ 。

copyOfRange()メソッドの動作を示す例を見ていきましょう。 coffeesのコピーを作成するとします。 以前の配列。このコードを使用してこれを行うことができます。

import java.util.Arrays;

class CopyUsingRange {
	public static void main(String[] args) {
		String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};

		String[] summer_coffees = Arrays.copyOfRange(coffees, 0, coffees.length);
		System.out.println("Summer coffees: " + Arrays.toString(summer_coffees));
	}
}

私たちのコードは次を返します:

Summer coffees: [Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]

コードを分解してみましょう。

  1. java.util.Arraysをインポートします この例で使用するcopyOfRange()メソッドとtoString()メソッドを格納するライブラリ。
  2. coffeesという配列を宣言します 標準メニューにコーヒーを保存します。
  3. summer_coffeesという配列を宣言します そして、copyOfRange()メソッドを使用して、coffeesのコピーを作成します。 配列。指定するパラメーターは次のとおりです。
    1. コーヒー コピーするアレイの名前です。
    2. インデックス位置0から始まる値をcoffeesからコピーすることを指定します 配列。
    3. coffees.length リスト内のすべての値をコピーすることを指定します。
  4. 「Summercoffees:」の後に、summer_coffeesという名前の配列を出力します。 コンソールに。

これで、「coffees」のコピーを作成しました summer_coffeesというリスト 。

arraycopy()Javaメソッドの使用

arraycopy()メソッドは、ある配列から別の配列にデータをコピーするために使用されます。 arraycopy()メソッドはSystemクラスの一部であり、既存の配列のコピーをカスタマイズできるようにするいくつかのオプションが含まれています。

arraycopy()メソッドの構文は次のとおりです。

System.arraycopy(sourceArray, startingPos, newArray, newArrayStartingPos, length);

この方法を分解してみましょう。 copyarray()は、次の5つのパラメーターを受け入れます。

  • sourceArray コピーするアレイの名前です。
  • startingPos source_arrayの値のコピーを開始するインデックス位置です。 。
  • newArray 値がコピーされる新しい配列の名前です。
  • newArrayStartingPos コピーされた値を追加するインデックス位置です。
  • 長さ new_arrayにコピーする要素の数です 。

コーヒーショップに戻りましょう。 coffeesのすべての値をコピーしたいとします。 summer_coffeesという新しい配列への配列 。このコードを使用してこれを行うことができます。

import java.util.Arrays;

class ArrayCopyMethod {
	public static void main(String[] args) {
		String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};
		String[] summer_coffees = new String[6];

		System.arraycopy(coffees, 0, summer_coffees, 0, coffees.length);
		System.out.println("Summer coffees: " + Arrays.toString(summer_coffees));
	}
}

私たちのコードは次を返します:

Summer coffees: [Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]

コードを段階的に分解してみましょう。

  1. java.util.Arraysをインポートします プログラム開始時のパッケージ。これには、プログラムの最後に作成する配列コピーを印刷するために使用するtoString()メソッドが含まれます。
  2. coffeesという配列を宣言します 標準メニューにコーヒーを保存します。
  3. summer_coffeesという配列を初期化します これは6つの値を保持します。
  4. arraycopy()を使用して、coffeesのコピーを作成します 配列。指定するパラメーターは次のとおりです。
    1. コーヒー コピーしたい配列です。
    2. コピーをcoffeesで開始する位置です 配列。
    3. summer_coffees コピーした値を追加する配列です。
    4. コピーした値をsummer_coffeesに追加し始める位置です。 配列。
    5. coffees.length コピーする配列要素の数です。この場合、coffees.lengthを使用します coffeesからすべての要素をコピーできます リスト。
  5. 「サマーコーヒー:」というメッセージを印刷し、その後に作成したサマーコーヒーのリストを印刷します。

結論

リストを操作する場合、配列のコピーは一般的な操作です。このチュートリアルでは、Javaで配列をコピーする4つの方法について説明しました。

最初に、代入演算子を使用して浅いコピーを作成する方法について説明し、次にforを使用して深いコピーを作成する方法について説明しました。 ループ。次に、copyOfRange()メソッドを使用して配列のコピーを作成する方法と、arraycopy()システムメソッドを使用して配列をコピーする方法について説明しました。

これで、プロのようにJavaでアレイのコピーを開始する準備が整いました。


  1. JavaScriptで配列を空にする方法の数

    JavaScriptで配列を空にするには、4つの方法があります- 新しいアレイへの設定 −これでは、配列変数を新しい空の配列に設定します。 長さプロパティの使用 −これでは、配列の長さプロパティを0に設定します。 ポップの使用 −これでは、長さが0に達するまで配列要素を連続的にポップします。 スプライスの使用 −ここでは、開始インデックスを0とし、削除する要素の数をarray.length-1とします。 以下は、noを表示するコードです。 JavaScriptで配列を空にする方法の例- 例 <!DOCTYPE html> <html lang="en"

  2. JavaのArrayIndexOutOfBoundsExceptionとは何ですか?

    配列はデータ構造/コンテナ/オブジェクトです 同じタイプの要素の固定サイズの順次コレクションを格納します。配列のサイズ/長さは作成時に決定されます。 配列内の要素の位置は、インデックスまたは添え字と呼ばれます。配列の最初の要素はインデックス0に格納され、2番目の要素はインデックス1に格納されます。 配列内の各要素には、配列の名前とそれに続く角かっこで囲まれた必要な要素のインデックスを含む式を使用してアクセスします。 System.out.println(myArray[3]); //prints 1457 一般に、配列は固定サイズであり、各要素はインデックスを使用してアクセスされま