在下面的示例中,我将元素添加到普通的ArrayList,然后添加到自定义的ArrayList。虽然前者可以很好地将每个元素添加到ArrayList中,但是后者似乎只会覆盖添加的元素。
有人可以解释一下这里发生了什么,以及如何解决它?
package jExample;
import java.util.ArrayList;
public class ForLoopArrayList {
public static void main(String[] args) {
// customized ArrayList
ArrayList<CDatabase> box = new ArrayList<>();
// standard ArrayList
ArrayList<String> var1 = new ArrayList<>();
ArrayList<String> var2 = new ArrayList<>();
CDatabase recBox = new CDatabase();
for( int i = 0; i < 9; i++){
// populating customized ArrayList
recBox.var1 = i * 1.1;
recBox.var2 = i * 11.;
box.add(recBox);
// populating standard ArrayList
var1.add( Double.toString( i * 1.1 ) );
var2.add( Double.toString( i * 11. ) );
}
for(int i = 0; i < var1.size(); i++){
CDatabase test = box.get( i );
System.out.println( var1.get( i ) + " " + var2.get( i ) + " " + test.var1);
}
System.out.println( var1.size() );
System.out.println( box.size() );
}
}
使用以下CDatabase类:
package jExample;
public class CDatabase {
public double var1;
public double var2;
}
答案 0 :(得分:1)
正如我在评论中写的那样,问题是你一直在编写相同的CDatabase对象,每次尝试创建一个新对象,而不是在for循环中移动CDatabase recBox = new CDatabase();
:
CDatabase recBox;
for (int i = 0; i < 9; i++) {
recBox = new CDatabase();
// populating customized ArrayList
recBox.var1 = i * 1.1;
recBox.var2 = i * 11.;
box.add(recBox);
// populating standard ArrayList
var1.add(Double.toString(i * 1.1));
var2.add(Double.toString(i * 11.));
}
干杯!