2014-04-29 4 views
0

프로그램 중에 업데이트 될 배열이 있으며 모든 업데이트를 추적해야합니다. 그래서 매번 ArrayList에 업데이트 된 배열을 저장하려고합니다.java에서 업데이트 후 매번 업데이트 된 배열을 저장하는 방법은 무엇입니까?

double[]a={1,2,3} 
List<double[]> Store = new ArrayList<double[]>(); 
Store.add(a); 

다음 I은 A가 같이 업데이트 할 것이다 : 예를 들면 A가 [0] = 10; 가 다음 내가 저장할 새 '는'스토어 '의 끝에 다른 행에 : Store.add (가)

그러나, 나는 새'A '에서'저장 '의 ArrayList를 저장하려고하면, 자동으로 이전 'a'도 업데이트됩니다. 그래서 나에게 '스토어'에 대한이 출력 제공 : 10,2,3 10,2,3

을하지만 대신에 '스토어'에 대한 출력을 다음 한해야

1,2,3 10,2,3

누구든지이 문제를 해결할 수 있습니까? 감사.

+0

왜 당신이 배열의 목록을 사용하는 기본 요소로 작동합니다

이 Store.add 그런 짓을? –

답변

3

하나의 배열이 있고 그 배열에 대한 참조가 목록에 계속 추가됩니다.

당신은 고려할 수 :

double[] a = {1,2,3}; 
List<double[]> store = new ArrayList<double[]>(); 
store.add(Arrays.copyOf(a, a.length)); 

이 .. 'A'마다의 새 복사본을 저장합니다.

+0

정말 고마워요. 도와 주셔서 정말 고맙습니다. 그게 효과가 있었어. – user3586916

0

Java의 배열은 참조로 전달됩니다. 즉, "a"를 추가하면 "a"에 대한 참조가 추가되고 "a"를 변경하면 해당 배열의 다른 모든 인스턴스도 변경됩니다.

배열을 새로운 데이터 조각으로 복사하고 저장해야합니다. System.arraycopy()을 사용할 수 있습니다.

0

문제는 'double [] a'의 값을 업데이트하고 각각의 고유 복사본에 대해 새 배열을 만들지 않아서 배열에 동일한 참조 사본을 더 추가하는 것입니다.

추가하기 전에 System.ArrayCopy를 사용하거나 배열의 새 인스턴스를 만들면됩니다.

0

배열 개체는 부작용이 있습니다. (a.clone()) 는 easly

관련 문제