Java ArrayList 사본
나는이 ArrayList
l1
크기 10. I 어사 l1
새 목록 참조 유형을 l2
. 윌 l1
과 l2
같은 가리킨 ArrayList
객체? 또는 ArrayList
객체 의 사본이에 할당되어 l2
있습니까?
l2
참조를 사용할 때 목록 객체를 업데이트하면 l1
참조 유형 의 변경 사항도 반영 됩니다.
예를 들면 다음과 같습니다.
List<Integer> l1 = new ArrayList<Integer>();
for (int i = 1; i <= 10; i++) {
l1.add(i);
}
List l2 = l1;
l2.clear();
두 개의 목록 객체를 생성하고 컬렉션에서 오래된 것에서 새로운 것으로 복사하는 것을 제외하고 새로운 참조 변수에 목록 객체의 사본을 할당하는 다른 방법이 있습니까?
예, 할당은 (참조 인) 의 값 을에 복사합니다 . 둘 다 동일한 객체를 참조합니다.l1
l2
얕은 사본을 만드는 것은 매우 쉽습니다.
List<Integer> newList = new ArrayList<>(oldList);
(한 가지 예일뿐입니다.)
사용하려고 Collections.copy(destination, source);
예 l1
, l2
동일한 참조, 동일한 객체를 가리 킵니다.
다른 ArrayList를 기반으로 새 ArrayList를 작성하려면 다음을 수행하십시오.
List<String> l1 = new ArrayList<String>();
l1.add("Hello");
l1.add("World");
List<String> l2 = new ArrayList<String>(l1); //A new arrayList.
l2.add("Everybody");
결과에는 l1
여전히 2 개의 요소가 있고 l2
3 개의 요소가 있습니다.
src ArrayList에서 dest Arraylist로 값을 복사하는 또 다른 편리한 방법은 다음과 같습니다.
ArrayList<String> src = new ArrayList<String>();
src.add("test string1");
src.add("test string2");
ArrayList<String> dest= new ArrayList<String>();
dest.addAll(src);
이것은 단지 참조의 복사가 아니라 실제 값의 복사입니다.
하나의 ArrayList를 다른 ArrayList로 복사하는 목적으로 사용되는 addAll () 메소드가 있습니다 .
예를 들어 sourceList 와 targetList의 두 가지 Array List가 있습니다. 아래 코드를 사용하십시오.
targetList.addAll (sourceList);
Java는 객체를 전달하지 않고 참조 (포인터)를 객체에 전달합니다. 예, l2와 l1은 같은 객체에 대한 두 개의 포인터입니다.
동일한 내용을 가진 두 개의 다른 목록이 필요한 경우 명시적인 사본을 만들어야합니다.
참고 URL : https://stackoverflow.com/questions/6536094/java-arraylist-copy
'IT story' 카테고리의 다른 글
NoClassDefFoundError-Eclipse 및 Android (0) | 2020.05.11 |
---|---|
두 SQL Server 데이터베이스 (스키마 및 데이터)를 비교하는 가장 좋은 도구는 무엇입니까? (0) | 2020.05.11 |
TextInputLayout의 플로팅 레이블 색상을 변경하는 방법 (0) | 2020.05.11 |
웹 사이트에서 현재 연도를 인쇄하는 가장 짧은 방법 (0) | 2020.05.11 |
선 사이의 Android TextView 패딩 (0) | 2020.05.11 |