Java 如何在进行计算时不修改Arraylist中的Arraylist元素?

Java 如何在进行计算时不修改Arraylist中的Arraylist元素?,java,Java,我正在尝试将调整值分配给ArrayListadjustedValues,并且需要在main中调用adjustValues()方法后,estimatedValues不会更改 我尝试在adjustValues()方法中使用: ArrayList<ArrayList<Double>> adjustedValues = (ArrayList< ArrayList< Double>>) estimatedValues.clone(); ArrayList

我正在尝试将调整值分配给
ArrayList
adjustedValues
,并且需要在main中调用
adjustValues()
方法后,
estimatedValues
不会更改

我尝试在
adjustValues()
方法中使用:

ArrayList<ArrayList<Double>> adjustedValues = (ArrayList< ArrayList< Double>>) estimatedValues.clone();
ArrayList adjustedValues=(ArrayList)estimatedValues.clone();
但是运气不好,因为我需要的元素还在修改中

import java.util.ArrayList;

public class Test123 {

    public static void main(String[] args) {

        ArrayList<ArrayList<Double>> initialWeight = generateRandomWeights(6,0.1, 1);
        ArrayList<ArrayList<Double>> estimatedValues = generateRandomWeights(6,0.1, 1);

        ArrayList<ArrayList<Double>> adjustedValues = adjustValues(initialWeight, estimatedValues);
    }


    public static ArrayList<ArrayList<Double>> adjustValues (ArrayList<ArrayList<Double>> weights, ArrayList<ArrayList<Double>> estimateValues){

        ArrayList<ArrayList<Double>> adjustedValues = new ArrayList<>(estimateValues);


        for(int i=0; i<estimateValues.size(); i++){
            for(int j=0; j<estimateValues.get(i).size(); j++){
                adjustedValues.get(i).set(j, estimateValues.get(i).get(j) * weights.get(i).get(j));


            }
        }

        return adjustedValues;
    }

    public static ArrayList<Double> getArrayListOfRandom(int c,double min, double max){
        ArrayList randomValues = new ArrayList();

        for(int i=0;i< c; i++){
            double x = ((Math.random() * (max - min)) + min);
            randomValues.add(x);
        }


        return randomValues;
    }

    public static ArrayList<ArrayList<Double>> generateRandomWeights(int c, double min, double max){
        ArrayList<ArrayList<Double>> weights = new ArrayList<>();


        for(int i=0; i<c; i++){
            weights.add(getArrayListOfRandom(c,min,max));
        }

        return weights;
    }


}

import java.util.ArrayList;
公共类Test123{
公共静态void main(字符串[]args){
ArrayList initialWeight=GeneratorDomainWeights(6,0.1,1);
ArrayList estimatedValues=生成器域权重(6,0.1,1);
ArrayList adjustedValues=调整值(初始重量、估计值);
}
公共静态ArrayList调整值(ArrayList权重、ArrayList估计值){
ArrayList adjustedValues=新的ArrayList(估计值);

对于(int i=0;i
ArrayList.clone
和复制构造函数都会创建初始ArrayList的浅层副本。如果它是一个原语列表,这将很好,但您的列表包含其他列表,因此浅层副本意味着它们仍然是可变的(内容可以更改)。关于这个问题,我们讨论了几种进行深度复制的方法。

ArrayList.clone
和复制构造函数都会创建初始ArrayList的浅层副本。如果它是一个原语列表,这将很好,但您的列表包含其他列表,因此浅层副本意味着它们仍然是可变的(内容可以更改).关于这个问题,我们讨论了一些进行深度复制的方法