Если вы пытаетесь скопировать матрицу, имейте в виду, Double
невозможно изменить, поэтому нет смысла создавать новые экземпляры.Вы можете свободно копировать ссылки, используя что-то вроде:
List> copy = new ArrayList> ();copy.addAll (оригинал);
Затем вы можете изменить любой из элементов, и оригинал не будет изменен:
copy.get( 0 ) .get( 0 ) = -1.0;
// original at ( 0,0 ) remains the same ...
Хорошо, я получил свой компилятор и создалработает образец, чтобы проверить мою точку зрения не клонировать значения.
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
public class CopyMatrix {
public static void main( String [] args ) {
Matrix m = new Matrix();
m.add( Arrays.asList(0.0, 1.0, 2.0 ));
m.add( Arrays.asList(3.0, 4.0, 5.0 ));
m.add( Arrays.asList(6.0, 7.0, 8.0 ));
System.out.println("m = \n" + m );
Matrix m1 = m.copy() ;
m1.get( 0 ).set( 0 , 100.0 );
m1.get( 2 ).set( 2 , -400.0 );
System.out.printf( "After m = %n %s %n m1 = %n %s %n", m, m1);
}
}
class Matrix extends ArrayList<List<Double>> {
public Matrix copy() {
Matrix copy = new Matrix();
for( List<Double> each : this ) {
copy.add( new ArrayList<Double>( each ) );
}
return copy;
}
}
Вывод:
java CopyMatrix
m =
[[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]]
After m =
[[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]]
m1 =
[[100.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, -400.0]]
Это работает !!