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); } }</string></string></string></string>
出力:
宛先リストのサイズは 0 で、ソース リストのサイズは 6 であるため、宛先リストにはその特定のインデックスの場所がありません。したがって、以下の例外が出力としてスローされます。
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); } }</string></string></string></string>
出力:
説明:
- ソース リストには、上記の例の宛先リストと同じインデックス 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); } }</string></string></string></string>
出力:
説明:
- ここでは、宛先リストに要素がコピーされると、宛先リストの最初の 3 つのインデックスにある要素が上書きされ、他のインデックスにある要素は影響を受けません。
結論
コレクション パッケージは、1 つのソース リストの要素を同じインデックスにある宛先リストにコピーするために使用できるパブリック静的メソッドを提供します。このメソッドは、ソース リストより大きい宛先リストでのみ機能し、この操作の時間計算量は線形です。
以上がJavaのcopy()の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于平衡二叉树(AVL树)的相关知识,AVL树本质上是带了平衡功能的二叉查找树,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要整理了Stream流的概念和使用的相关问题,包括了Stream流的概念、Stream流的获取、Stream流的常用方法等等内容,下面一起来看一下,希望对大家有帮助。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ホットトピック



