Java ArrayList add()修改第一个条目,添加空条目
已调试我的代码,所有变量均按预期显示:Java ArrayList add()修改第一个条目,添加空条目,java,arraylist,Java,Arraylist,已调试我的代码,所有变量均按预期显示: class1 { callingMethod() { Double[] entry = new Double[size]; while(condition) { for (i over entry) { entry[i] = Double.parseDouble(token.nextToken()); } D
class1 {
callingMethod() {
Double[] entry = new Double[size];
while(condition) {
for (i over entry) {
entry[i] = Double.parseDouble(token.nextToken());
}
DataSet.addInput(entry);
}
}
}
DataSet {
private ArrayList<Double[]> inputsList;
public DataSet (...) {
list = new <Double[]>ArrayList();
}
public void addInput(Double[] anInputVector) {
inputsList.add(anInputVector);
}
}
class1{
调用方法(){
Double[]条目=新的Double[大小];
while(条件){
(i)超额入境{
条目[i]=Double.parseDouble(token.nextToken());
}
DataSet.addInput(条目);
}
}
}
数据集{
私有数组列表输入列表;
公共数据集(…){
列表=新的ArrayList();
}
public void addInput(双[]输入向量){
输入列表。添加(输入向量);
}
}
“entry”是每个新条目正确填充的double数组。当每个新条目添加到“列表”中时,第一个列表条目将使用新的双精度值进行修改,并添加一个空条目。结果是,第一个条目是一个双精度数组(最后添加),后面是一长串空值。
有什么想法吗 这似乎是一种共享数组对象的情况。例如:
List<double[]> list = new ArrayList<>();
double[] a = new double[] { 1.0, 2.0 };
double[] b = new double[] { 3.0, 4.0 };
// Three new's: three objects.
list.add(a);
list.add(a);
list.add(b);
a[0] = 5.0;
list.get(0)[1] = 6.0;
// list: [ [5.0, 6.0]==a, [5.0, 6.0]==a [3.0, 4.0]==b ]
这似乎是共享一个数组对象的情况。例如:
List<double[]> list = new ArrayList<>();
double[] a = new double[] { 1.0, 2.0 };
double[] b = new double[] { 3.0, 4.0 };
// Three new's: three objects.
list.add(a);
list.add(a);
list.add(b);
a[0] = 5.0;
list.get(0)[1] = 6.0;
// list: [ [5.0, 6.0]==a, [5.0, 6.0]==a [3.0, 4.0]==b ]
请张贴您的实际代码。这甚至不会编译,而且据我所知,不会产生您描述的错误行为。我添加了更多。全部代码?这是一个公平的大小,你想要全部吗?请张贴你的实际代码。这甚至不会编译,而且据我所知,不会产生您描述的错误行为。我添加了更多。全部代码?这是一个公平的大小,你想要全部吗?还是在OP的伪代码的当前迭代中,每次在
while(condition)
循环中创建一个新数组。@MattiVirkkunen是的,这可能更灵活;当一个人知道传递的数组没有被进一步使用时。@MattiVirkkunen是的,这是有效的。谢谢你和乔普。我没有意识到这一点-我想这是一个引用调用问题。@vv111y yes引用调用(正在传递的对象地址),或者每次在OP的伪代码当前迭代中的while(condition)
循环中创建一个新数组。@MattiVirkkunen yes,这可能更灵活;当一个人知道传递的数组没有被进一步使用时。@MattiVirkkunen是的,这是有效的。谢谢你和乔普。我不知道这是一个引用调用问题。@vv111y yes引用调用(正在传递的对象地址)