동일한 벡터의 다른 벡터에 벡터를 복사하고 있습니다. 복사 벡터를 수정했지만 원래 벡터도 업데이트되고 있습니다. 이유를 모르겠습니까?원본 벡터를 업데이트하지 않고 하나의 벡터를 Java의 다른 벡터로 복사하려면 어떻게해야합니까?
Vector<allocated>finished_copy=new Vector<allocated>();
finished_copy=finished;
난 당신이 할당 할 때
이
동일한 벡터의 다른 벡터에 벡터를 복사하고 있습니다. 복사 벡터를 수정했지만 원래 벡터도 업데이트되고 있습니다. 이유를 모르겠습니까?원본 벡터를 업데이트하지 않고 하나의 벡터를 Java의 다른 벡터로 복사하려면 어떻게해야합니까?
Vector<allocated>finished_copy=new Vector<allocated>();
finished_copy=finished;
난 당신이 할당 할 때
이
복사본을 만들지 않으 셨습니다.
하기 전에 :
finished ------> [a, b, c, d]
후 : 다른 변수에 같은 벡터를 할당한다하고있는 모든 여기
finished ------> [a, b, c, d]
^
|
finished_copy ---/
가 다른 하나에 벡터의 모든 요소를 복사 할 방법 :
Vector<Allocated> finishedCopy = new Vector<>(finished);
또는
Vector<Allocated> finishedCopy = new Vector<>();
finishedCopy.addAll(finished);
그러나 동일한 할당 된 인스턴스에 대한 참조를 포함하는 두 개의 다른 벡터가 만들어집니다. 원하는 오브젝트가 해당 오브젝트의 사본이면, 명시 적 사본을 작성해야합니다. 복사본을 만들지 않고 첫 번째 목록의 개체 상태를 변경하면 두 번째 목록의 개체 상태가 변경됩니다. 두 목록에는 같은 개체에 대한 참조가 포함되어 있기 때문입니다.
참고. Java 2 이후 ArrayList가 있어야합니다. 우리는 Java 8입니다.
에서 저를 도와주세요 후 수정
for(int k=0;k<finished.size();k++) {
System.out.print(finished.elementAt(k).output);
System.out.print(finished.elementAt(k).step);
System.out.println();
}//some modification on finished_copy
전에 원래 벡터의 값을 인쇄 및 원본을 인쇄하지만 둘은 다른거야 finished_copy
을 참조하면 new Vector()
에 연결할 수 없습니다. (this Vector
constructor 사용)
Vector<allocated>finished_copy=new Vector<>(finished);
주와 같은이,
Vector<allocated>finished_copy=new Vector<allocated>();
finished_copy=finished;
이 있어야 할 일이 여전히 finished
의 내용의 단순 복사본입니다.
의견을 보내 주신 Nizet에게 감사드립니다. 객체의 명시적인 사본이 필요하다고 생각합니다. 원본의 내용을 반복하고 하나씩 복사하거나해야합니까? 사전 정의 된 메소드가 있습니까? – cauchy
복사 생성자를 생성해야합니다. 즉, Allocated로 인수의 다른 인스턴스를 가져 와서 상태를 복사하는 생성자를 생성해야합니다. –