首頁 >Java >java教程 >Java 中的 copy()

Java 中的 copy()

WBOY
WBOY原創
2024-08-30 15:38:30971瀏覽

在Java中,在使用集合時,我們會遇到各種將一個清單的元素複製到另一個清單的情況,但要注意複製時不能影響元素的索引。對於這種類型的場景,java.util.Collections套件為我們提供了一個函數copy(),它將一個列表中存在的元素複製到另一個列表中,這樣元素在新列表中也具有相同的索引。使用此功能時,目標清單的大小必須大於來源清單的大小。這個函數的時間複雜度是線性的。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

帶參數的語法

以下是帶有參數的 java 中 copy() 的語法:

文法:

public static void copy(List dest, List src)
  • 這裡,public關鍵字指定函數可以在任何其他類別中輕鬆呼叫。
  • static 關鍵字是指該函數在類別層級上工作,因此只需要被其他靜態函數調用,也可以使用類別名稱而不使用類別的物件來調用。
  • void 關鍵字用於指示函數不傳回任何內容。

參數:

  • dest: List 類型變量,保存需要複製資料的目標清單的參考。
  • src:List類型變量,保存需要複製的來源清單的引用。

上述函數拋出以下異常:

  • IndexOutOfBoundsException:當目標清單的大小小於來源清單的大小時,就會發生此異常。
  • UnsupportedOperationException: 當目標清單的清單迭代器不支援設定操作時,會發生此異常。

copy() 方法在 Java 中如何運作?

  • Copy() 方法需要 2 個清單。需要複製元素的來源清單和需要複製清單元素的目標清單。
  • 首先,檢查目標清單的大小是否大於來源清單;否則,會拋出 IndexOutOfBoundsException 例外。
  • 這表示 JVM 無法找到需要複製的元素的索引,因為在將元素從來源清單複製到目標清單時,也會處理該元素的索引。如果目標清單中存在相同索引處的一個元素,則該特定元素將被複製元素覆寫。
  • 來源清單中的其他元素與其索引值一起被一一複製,並複製到相同索引處的目標清單。目標清單中其他索引處存在的元素保持不變。
  • 整個操作是使用元素的單次迭代完成的,因此具有線性時間複雜度,這意味著複雜度為 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 個元素,與上例中的目標清單相同。
  • 當這兩個清單傳入複製函數時,由於兩個清單的大小相同,目標清單中的元素會被來源清單中相同索引的元素覆蓋。

範例 #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 個索引處的元素會被覆蓋,而其他索引處的元素不受影響。

結論

collections 套件為我們提供了一個公開靜態方法,可用來將來源清單的元素複製到相同索引處的目標清單中。此方法僅適用於大於來源列表的目標列表,且此操作具有線性時間複雜度。

以上是Java 中的 copy()的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:在Java中重繪下一篇:在Java中重繪