>  기사  >  Java  >  자바의 copy()

자바의 copy()

WBOY
WBOY원래의
2024-08-30 15:38:30767검색

Java에서는 컬렉션을 사용하는 동안 복사하는 동안 요소의 인덱스가 영향을 받아서는 안 된다는 예방 조치로 한 목록의 요소를 다른 목록의 요소에 복사하는 다양한 시나리오를 접하게 됩니다. 이러한 유형의 시나리오를 위해 java.util.Collections 패키지는 한 목록에 있는 요소를 다른 목록에 복사하여 요소가 새 목록에서도 동일한 인덱스를 갖도록 하는 copy() 함수를 제공합니다. 이 기능을 사용하는 동안 대상 목록의 크기는 원본 목록의 크기보다 커야 합니다. 이 함수의 시간 복잡도는 선형입니다.

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

매개변수 구문

다음은 매개변수가 있는 Java의 copy() 구문입니다.

구문:

public static void copy(List dest, List src)
  • 여기서 public 키워드는 이 함수가 다른 클래스에서 쉽게 호출될 수 있음을 지정합니다.
  • 정적 키워드는 이 함수가 클래스 수준에서 작동하므로 다른 정적 함수에 의해서만 호출되어야 하며 클래스의 객체를 사용하지 않고 클래스 이름을 사용하여 호출될 수 있음을 의미합니다.
  • Void 키워드는 이 함수가 아무것도 반환하지 않음을 나타내는 데 사용됩니다.

인수:

  • dest: 데이터를 복사해야 하는 대상 목록에 대한 참조를 보유하는 목록 유형 변수입니다.
  • src: 복사해야 하는 소스 목록에 대한 참조를 보유하는 목록 유형 변수입니다.

위 함수에서 아래 예외가 발생합니다.

  • IndexOutOfBoundsException: 이 예외는 대상 목록의 크기가 소스 목록의 크기보다 작을 때 발생합니다.
  • UnsupportedOperationException: 이 예외는 대상 목록의 목록 반복자가 설정 작업을 지원하지 않을 때 발생합니다.

Java에서 copy() 메소드는 어떻게 작동하나요?

  • 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이므로 해당 특정 인덱스의 대상 목록에는 위치가 없습니다. 따라서 아래 예외가 출력으로 발생합니다.

자바의 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);       }
}

출력:

자바의 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);
}
}

출력:

자바의 copy()

설명:

  • 여기서는 요소가 복사될 때 대상 목록의 처음 3개 인덱스에 있는 요소가 덮어쓰여지고 다른 인덱스에 있는 요소는 영향을 받지 않은 채 유지되는 것을 확인했습니다.

결론

컬렉션 패키지는 하나의 소스 목록 요소를 동일한 인덱스의 대상 목록에 복사하는 데 사용할 수 있는 공개 정적 메서드를 제공합니다. 이 방법은 원본 목록보다 큰 대상 목록에서만 작동하며 이 작업은 선형 시간 복잡도를 갖습니다.

위 내용은 자바의 copy()의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Java로 다시 칠하기다음 기사:Java로 다시 칠하기