Javaのcopy()

WBOY
リリース: 2024-08-30 15:38:30
オリジナル
960 人が閲覧しました

Java では、コレクションを使用するときに、コピー中に要素のインデックスが影響を受けないよう注意しながら、あるリストの要素を別のリストにコピーするさまざまなシナリオに遭遇します。このような種類のシナリオの場合、java.util.Collections パッケージには、一方のリストに存在する要素をもう一方のリストにコピーする関数 copy() が用意されており、新しいリストでも要素が同じインデックスを持つようになります。この関数を使用する場合、宛先リストのサイズはソース リストのサイズより大きくなければなりません。今回のこの関数の複雑さは線形です。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

パラメータを含む構文

以下は、パラメータを使用した Java の copy() の構文です。

構文:

public static void copy(List dest, List src)
ログイン後にコピー
  • ここで、public キーワードは、この関数が他のクラスで簡単に呼び出せることを指定しています。
  • 静的キーワードは、この関数がクラス レベルで動作することを指します。そのため、クラスのオブジェクトを使用せずにクラス名を使用して呼び出すことができるのと同様に、他の静的関数によってのみ呼び出す必要があります。
  • Void キーワードは、この関数が何も返さないことを示すために使用されます。

引数:

  • dest: これは、データのコピーが必要な宛先リストの参照を保持するリスト型変数です。
  • src: コピーする必要のあるソース リストの参照を保持するリスト型変数です。

上記の関数は以下の例外をスローします:

  • IndexOutOfBoundsException: この例外は、宛先リストのサイズがソース リストのサイズより小さい場合に発生します。
  • UnsupportedOperationException: この例外は、宛先リストのリスト反復子が集合演算をサポートしていない場合に発生します。

Java では copy() メソッドはどのように機能しますか?

  • Copy() メソッドは 2 つのリストを受け取ります。要素をコピーする必要があるソース リストと、リストの要素をコピーする必要がある宛先リスト。
  • まず、宛先リストのサイズがソースリストよりも大きいかどうかがチェックされます。それ以外の場合は、IndexOutOfBoundsException 例外がスローされます。
  • これは、ソース リストから宛先リストに要素をコピーするときに要素のインデックスも処理されるため、JVM がコピーする必要がある要素のインデックスを見つけられないことを示します。コピー先リストの同じインデックスに要素が 1 つ存在する場合、その特定の要素はコピー要素によって上書きされます。
  • ソース リストの Else 要素はインデックスの値とともに 1 つずつコピーされ、同じインデックスで宛先リストにコピーされます。宛先リストの他のインデックスに存在する要素は変更されません。
  • この操作全体は要素の 1 回の反復を使用して実行されるため、線形時間計算量があり、計算量は O(n) になります。

Java での copy() の例

以下に挙げる例は次のとおりです。

例 #1

宛先リストのサイズがソース リストより小さい場合の IndexOutOfBoundsException の発生を説明します。

コード:

import java.util.*;
public class Demo {
public static void main(String[] args) {
List<String> mysrclist = new ArrayList<String>(6);
List<String> mydestlist = new ArrayList<String>(11);
mysrclist.add("Lets practice");
mysrclist.add("Java");
mysrclist.add("with US");
mysrclist.add("EDUCBA");
mysrclist.add("is a great");
mysrclist.add("Learnig Platform");
Collections.copy(mydestlist, mysrclist);
System.out.println("Elements of source list: "+mysrclist);
System.out.println("Elements of destination list: "+mydestlist);
}
}
ログイン後にコピー

出力:

宛先リストのサイズは 0 で、ソース リストのサイズは 6 であるため、宛先リストにはその特定のインデックスの場所がありません。したがって、以下の例外が出力としてスローされます。

Javaのcopy()

E説明:

  • 上記のプログラムの場合、リストを2つ取り出してcopy()メソッドに引数として渡していますが、コピー先のリストのサイズがコピー元のリストのサイズより小さいため、IndexOutOfBoundsExceptionが発生します。
  • このような問題は、宛先リストのサイズがソース リストと同じである以下の例で解決されます。

例 #2

コード:

import java.util.*;
public class Demo {
public static void main(String[] args) {
List<String> mysrclist = new ArrayList<String>(6);
List<String> mydestlist = new ArrayList<String>(11);
mysrclist.add("Lets practice");
mysrclist.add("Java");
mysrclist.add("with US");
System.out.println("Elements of source list: "+mysrclist);
mydestlist.add("EDUCBA");
mydestlist.add("is a great");
mydestlist.add("Learnig Platform");
System.out.println("Elements of destination list before copy() executes: "+mydestlist);
Collections.copy(mydestlist, mysrclist);
System.out.println("Elements of destination list after copy() executes: "+mydestlist);       }
}
ログイン後にコピー

出力:

Javaのcopy()

説明:

  • ソース リストには、上記の例の宛先リストと同じインデックス 0、1、2 の 3 つの要素があります。
  • これら 2 つのリストがコピー関数に渡されると、2 つのリストのサイズが同じであるため、宛先リストの要素は同じインデックスにあるソース リストの要素によって上書きされます。

例 #3

この例では、ソース リストの要素がコピー先リストの要素にコピーされるときに、宛先リストの要素がどのように上書きされるかを見ていきます。

コード:

import java.util.*;
public class Demo {
public static void main(String[] args) {
//Create lists for source and destination
List<String> mysrclist = new ArrayList<String>(6);
List<String> mydestlist = new ArrayList<String>(11);
//Populate two source and destination lists
mysrclist.add("DIgital Learning");
mysrclist.add("for Java");
mysrclist.add("is great");
System.out.println("Elements of source list: "+mysrclist);
mydestlist.add("Book Learning");
mydestlist.add("is");
mydestlist.add("a great");
mydestlist.add("Learnig Platform");
mydestlist.add("For All");
System.out.println("Elements of destination list before copying : "+mydestlist);
// copy into destination list
Collections.copy(mydestlist, mysrclist);
System.out.println("Elements of destination list after copying : "+mydestlist);
}
}
ログイン後にコピー

出力:

Javaのcopy()

説明:

  • ここでは、宛先リストに要素がコピーされると、宛先リストの最初の 3 つのインデックスにある要素が上書きされ、他のインデックスにある要素は影響を受けません。

結論

コレクション パッケージは、1 つのソース リストの要素を同じインデックスにある宛先リストにコピーするために使用できるパブリック静的メソッドを提供します。このメソッドは、ソース リストより大きい宛先リストでのみ機能し、この操作の時間計算量は線形です。

以上がJavaのcopy()の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート