2014-10-25 2 views

답변

1

복사본을 만들지 않으 셨습니다.

하기 전에 :

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); 

그러나 동일한 할당 된 인스턴스에 대한 참조를 포함하는 두 개의 다른 벡터가 만들어집니다. 원하는 오브젝트가 해당 오브젝트의 사본이면, 명시 적 사본을 작성해야합니다. 복사본을 만들지 않고 첫 번째 목록의 개체 상태를 변경하면 두 번째 목록의 개체 상태가 변경됩니다. 두 목록에는 같은 개체에 대한 참조가 포함되어 있기 때문입니다.

  • 클래스는
  • 변수 underscares을 포함 할 수 없습니다 대문자로 시작해야하지만,
  • 벡터는 더 이상 사용할 수 없습니다 낙타 표기법 수 : 것을

    참고. Java 2 이후 ArrayList가 있어야합니다. 우리는 Java 8입니다.

+0

의견을 보내 주신 Nizet에게 감사드립니다. 객체의 명시적인 사본이 필요하다고 생각합니다. 원본의 내용을 반복하고 하나씩 복사하거나해야합니까? 사전 정의 된 메소드가 있습니까? – cauchy

+0

복사 생성자를 생성해야합니다. 즉, Allocated로 인수의 다른 인스턴스를 가져 와서 상태를 복사하는 생성자를 생성해야합니다. –

0

에서 저를 도와주세요 후 수정

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의 내용의 단순 복사본입니다.

관련 문제