Вы добавляете один и тот же объект в список каждый раз.Вы должны использовать свежий экземпляр, созданный в цикле.
eg-
ArrayList<MyObj> al = new ArrayList<MyObj>();
int a,b;
for(int i =0;i<5;i++)
{
MyObj ob1 = new MyObj();
ob1.iX = i + 5;
al.add(ob1);
}
В противном случае ваш список будет содержать список ссылок на один и тот же экземпляр, и изменение этого одного экземпляра повлияет на каждую запись в этом списке.
Проблема такого рода является веским аргументом в пользу использования неизменных объектов везде, где это возможно.Если вы можете, хороший подход состоит в том, чтобы создать экземпляр поля iX
в конструкторе и сделать его final
, таким образом, не позволяя ему изменять постинстанцирование (проверьте ключевое слово Java final
).
public class MyObj {
private final int iX;
public MyObj(int i) {
iX = i; // iX is initialised here but can't be changed again
}
}
Этот подход может дать более безопасное решение (по сравнению с вышеизложенным) с оговоркой о том, что ваши объекты могут быть изменены после создания экземпляра.Это звучит как ограничительная практика, но вы будете удивлены, обнаружив, что многие ваши объекты могут быть реализованы таким образом.