Reputation: 1041
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
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