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