일부 데이터 구조가 있는데 하나를 임시로 사용하고 다른 하나를 임시가 아닌 것으로 사용하고 싶습니다.
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);
편집 : 보헤미안이 아래 댓글에서 지적했듯이 이것이 당신이 요구하는 것입니까? 위의 작업을 수행하면 ArrayList
s ( 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());
}**