Java에서 일반 목록을 어떻게 복제합니까? 반환하고 싶습니다있다.

나는이 ArrayList<String>내가 사본을 반환하고 싶습니다있다. ArrayList다음 서명이있는 복제 방법이 있습니다.

public Object clone()

이 메서드를 호출 한 후 반환 된 Object를 ArrayList<String>어떻게 다시 캐스팅 합니까?



답변

ArrayList newArrayList = (ArrayList) oldArrayList.clone();

답변

왜 복제하고 싶습니까? 일반적으로 새 목록을 만드는 것이 더 합리적입니다.

List<String> strs;
...
List<String> newStrs = new ArrayList<>(strs);

작업이 완료되었습니다.


답변

이것은 내가 사용하는 코드입니다.

ArrayList copy = new ArrayList (original.size());
Collections.copy(copy, original);

희망은 당신에게 유용합니다


답변

Java 8에서는 스트림으로 복제 할 수 있습니다.

import static java.util.stream.Collectors.toList;

List<AnObject> clone = myList.stream().collect(toList());

답변

Object.clone ()에는 몇 가지 중요한 문제가 있으며 대부분의 경우 사용을 권장하지 않습니다. 자세한 답변은 Joshua Bloch의 ” Effective Java “의 항목 11을 참조하십시오 . 기본 유형 배열에서 Object.clone ()을 안전하게 사용할 수 있다고 생각하지만 클론을 올바르게 사용하고 재정의하는 것에 대해서는 신중해야합니다. 의미에 따라 객체를 명시 적으로 복제하는 복사 생성자 또는 정적 팩토리 메소드를 정의하는 것이 좋습니다.


답변

이것이 Collections API를 사용하여 트릭을 수행해야한다고 생각합니다.

참고 : 복사 방법은 선형 시간으로 실행됩니다.

//assume oldList exists and has data in it.
List<String> newList = new ArrayList<String>();
Collections.copy(newList, oldList);

답변

addAll을 사용하면 정상적으로 작동합니다.

ArrayList<String> copy = new ArrayList<String>();
copy.addAll(original);

제네릭 구문 대신 괄호가 사용됩니다.