한 ArrayList의 내용을 다른 ArrayList에 어떻게 복사합니까?
일부 데이터 구조가 있는데 하나를 임시로 사용하고 다른 하나를 임시가 아닌 것으로 사용하고 싶습니다.
ArrayList<Object> myObject = new ArrayList<Object>();
ArrayList<Object> myTempObject = new ArrayList<Object>();
//fill myTempObject here
....
//make myObject contain the same values as myTempObject
myObject = myTempObject;
//free up memory by clearing myTempObject
myTempObject.clear();
이제 이것의 문제 myObject는 실제로를 가리키는 것입니다 . myTempObject그래서 일단 myTempObject지워 지면 myObject.
Java myTempObject를 myObject사용하여 값을 어떻게 유지 합니까?
다음과 같은 트릭을 사용할 수 있습니다.
myObject = new ArrayList<Object>(myTempObject);
또는 사용
myObject = (ArrayList<Object>)myTempObject.clone();
여기에서 clone () 메서드에 대한 정보를 얻을 수 있습니다.
그러나 이러한 모든 방법은 모든 요소가 아닌 List 의 사본을 제공한다는 점을 기억해야 합니다. 따라서 복사 한 목록의 요소 중 하나를 변경하면 원래 목록에서도 변경됩니다.
originalArrayList. addAll (copyArrayList);
참고 : addAll () 메서드를 사용하여 복사 할 때 두 배열 목록 (originalArrayList 및 copyArrayList)의 내용은 동일한 객체 또는 내용을 참조합니다. 따라서 그중 하나를 수정하면 다른 하나도 동일한 변경 사항을 반영합니다.
원하지 않는 경우 for 또는 while 루프를 사용하는 것처럼 originalArrayList의 각 요소를 copyArrayList로 복사해야합니다.
할당 연산자를 통해 Java에서 만든 암시 적 복사본이 없습니다. 변수는 참조 값 (포인터)을 포함하며 사용할 때 =해당 값만 처리합니다.
내용을 보존하려면 myTempObject사본을 만들어야합니다.
ArrayList다른 생성자를 사용하여 새 생성자를 생성하면됩니다 ArrayList.
ArrayList<Object> myObject = new ArrayList<Object>(myTempObject);
편집 : 보헤미안이 아래 댓글에서 지적했듯이 이것이 당신이 요구하는 것입니까? 위의 작업을 수행하면 ArrayLists ( myTempObject및 myObject) 모두 동일한 객체에 대한 참조가 포함 됩니다. 에 포함 된 개체의 새 복사본을 포함하는 새 목록을 실제로 원하는 경우 myTempObject원본에있는 각 개별 개체의 복사본을 만들어야합니다.ArrayList
같은 문제에 직면하면서 이것을 발견했습니다.
arraylist1 = arraylist2라고 말하면 둘 다 동일한 위치를 가리 키도록 설정하므로 데이터를 변경하면 두 목록이 항상 동일하게 유지됩니다.
값을 독립적 인 목록으로 복사하기 위해 방금 foreach를 사용하여 내용을 복사했습니다.
ArrayList list1 = new ArrayList();
ArrayList list2 = new ArrayList();
현재 어떤 방식 으로든 list1을 채우십시오.
foreach(<type> obj in list1)
{
list2.Add(obj);
}
oldList를 newList라는 새 ArrayList 객체에 복사하려고한다고 가정합니다.
ArrayList<Object> newList = new ArrayList<>() ;
for (int i = 0 ; i<oldList.size();i++){
newList.add(oldList.get(i)) ;
}
이 두 목록은 확실하지 않으며 하나의 변경 사항이 다른 목록에 반영되지 않습니다.
예를 들어 보겠습니다.
ArrayList<String> firstArrayList = new ArrayList<>();
firstArrayList.add("One");
firstArrayList.add("Two");
firstArrayList.add("Three");
firstArrayList.add("Four");
firstArrayList.add("Five");
firstArrayList.add("Six");
//copy array list content into another array list
ArrayList<String> secondArrayList=new ArrayList<>();
secondArrayList.addAll(firstArrayList);
//print all the content of array list
Iterator itr = secondArrayList.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
아래와 같이 인쇄 출력
하나
둘
셋
넷
다섯
여섯
정확한 복사본을 만드는 데 사용되는 clone () 메서드를 사용하여 수행 할 수도 있습니다.
그 시도를 위해 당신은 같이 시도 할 수 있습니다
**ArrayList<String>secondArrayList = (ArrayList<String>) firstArrayList.clone();**
And then print by using iterator
**Iterator itr = secondArrayList.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}**
clone()개별 개체 가 필요 합니다. Constructor및 다른 방법은 얕은 복사를 수행합니다. Collections.copy 메서드를 사용해 볼 수 있습니다 .
원본 목록의 전체 복사본을 만드는 간단한 방법은 한 목록의 모든 요소를 다른 목록에 추가하는 것입니다.
ArrayList<Object> originalList = new ArrayList<Object>();
ArrayList<Object> duplicateList = new ArrayList<Object>();
for(Object o : originalList) {
duplicateList.add(o);
}
이제 originalList를 변경하면 duplicateList에 영향을 미치지 않습니다.
to copy one list into the other list, u can use the method called Collection.copy(myObject myTempObject).now after executing these line of code u can see all the list values in the myObject.
Copy of one list into second is quite simple , you can do that as below:-
ArrayList<List1> list1= new ArrayList<>();
ArrayList<List1> list2= new ArrayList<>();
//this will your copy your list1 into list2
list2.addAll(list1);
Here is a workaround to copy all the objects from one arrayList to another:
ArrayList<Object> myObject = new ArrayList<Object>();
ArrayList<Object> myTempObject = new ArrayList<Object>();
myObject.addAll(myTempObject.subList(0, myTempObject.size()));
subList is intended to return a List with a range of data. so you can copy the whole arrayList or part of it.
Suppose you have two arraylist of String type . Like
ArrayList<String> firstArrayList ;//This array list is not having any data.
ArrayList<String> secondArrayList = new ArrayList<>();//Having some data.
Now we have to copy the data of second array to first arraylist like this,
firstArrayList = new ArrayList<>(secondArrayList );
Done!!
참고URL : https://stackoverflow.com/questions/8441664/how-do-i-copy-the-contents-of-one-arraylist-into-another
'Program Club' 카테고리의 다른 글
| Devise의 token_authenticatable은 안전한가요? (0) | 2020.10.15 |
|---|---|
| JTable은 열 머리글을 표시하지 않습니다. (0) | 2020.10.15 |
| Android Studio의 XML 속성 순서 (0) | 2020.10.15 |
| Kibana는 "검색"탭에 결과를 표시하지 않습니다. (0) | 2020.10.15 |
| 호스트에서 Docker 컨테이너의 mysql에 연결 (0) | 2020.10.15 |