Christian
Christian

Reputation: 1041

Adding elements to standard versus customized ArrayList

In the example below I add elements to an ordinary ArrayList and then to a customized ArrayList. While the former works fine adding each element to the ArrayList as expected the latter only seems to overwrite the added elements.

Could someone explain what is going on here please and how to fix it?

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() );     
    }

}

Using the following CDatabase class:

package jExample;

public class CDatabase {

    public double var1;
    public double var2;

}

Upvotes: 0

Views: 52

Answers (1)

Ceelos
Ceelos

Reputation: 1126

As I wrote in my comment, the problem is that you keep writing the same CDatabase object, try creating a new object each time instead by moving the CDatabase recBox = new CDatabase(); inside the for loop as such:

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


Cheers!

Upvotes: 1

Related Questions