我有一个将元素添加到ArrayList的问题。每次执行'add'时,整个数组内容都会替换为当前元素值。我结束了,例如。 10个重复的元素重复。
课程设置如下:
public class BradfordReport {
EmployeeRow _empRow = new EmployeeRow();
ArrayList<EmployeeRow> _bradfordData = new ArrayList<EmployeeRow>();
public void Run() {
// processing to setup Employee row variables
for (int x=0; x<10; x++) {
// This next line in debug IS ADJUSTING THE ARRAYLIST DATA!!
_empRow.EmpNum = x; // etc for other variable in EmployeeRow
_bradfordData.add(er);
}
}
// THE RESULT IN _bradfordData is 10 elements, all with EmpNum = 10!
}
public class EmployeeRow {
int EmpNum;
string EmpNm; // etc.
}
我在这里混淆了Java内存分配吗?似乎EmployeeRow变量和ArrayList共享相同的内存空间 - 非常奇特。谢谢你们
答案 0 :(得分:4)
您正在将EmployeeRow
类的相同实例添加到arraylist中。尝试类似:
public class BradfordReport {
EmployeeRow _empRow = new EmployeeRow();
ArrayList<EmployeeRow> _bradfordData = new ArrayList<EmployeeRow>();
public void Run() {
// processing to setup Employee row variables
for (int x=0; x<10; x++) {
// create a NEW INSTANCE of an EmployeeRow
_empRow = new EmployeeRow();
_empRow.EmpNum = x; // etc for other variable in EmployeeRow
_bradfordData.add(_empRow);
}
}
// THE RESULT IN _bradfordData is 10 elements, all with EmpNum = 10!
}
public class EmployeeRow {
int EmpNum;
string EmpNm; // etc.
}
答案 1 :(得分:2)
每次创建只有一个的EmployeeRow对象。
然后它被修改。 “它”是“同一个对象”。如果需要 new 对象,则创建 new 对象:)
快乐的编码。
答案 2 :(得分:1)
当你这样做时是的
_empRow.EmpNum = x;
您正在更改对象内部变量。您需要每次构造一个新对象。在循环内部执行以下操作:
EmployeeRow _empRow = new EmployeeRow();
_empRow.EmpNum = x;
_bradfordData.add(_empRow);
答案 3 :(得分:1)
您没有创建新行,因此每个元素都相同,并且由于循环结束于10,因此最后一个对象的值为10。
public class BradfordReport {
EmployeeRow _empRow = new EmployeeRow();
ArrayList<EmployeeRow> _bradfordData = new ArrayList<EmployeeRow>();
public void Run() {
// processing to setup Employee row variables
for (int x=0; x<10; x++) {
// This next line in debug IS ADJUSTING THE ARRAYLIST DATA!!
_empRow = new EmployeeRow();
_empRow.EmpNum = x; // etc for other variable in EmployeeRow
_bradfordData.add(er);
}
}
// THE RESULT IN _bradfordData is 10 elements, all with EmpNum = 10!
}