将元素添加到标准ArrayList和自定义ArrayList

时间:2016-02-19 22:25:35

标签: java for-loop arraylist

在下面的示例中,我将元素添加到普通的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;

}

1 个答案:

答案 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.));
    }


干杯!