kk luo :
I create a Object Arraylist of CompanyRecord and insert value in it. But when I loop the data is wrong.
public class CompanyRecord {
private String Code;
private String Name;
public void setValue(String value1,String column1)
{
if (column1.equals("Code"))
{
this.Code=value1;
}
else
{
this.Name=value1;
}
}
public String getValue(String column1)
{
if (column1.equals("Code"))
{
return Code;
}
else
{
return Name;
}
}
}
The loop and insert code is:
ArrayList<CompanyRecord> codelist=new ArrayList<CompanyRecord>();
CompanyRecord codeItem=new CompanyRecord();
codeItem.setValue("first", "Code");
codeItem.setValue("1", "Name");
odelist.add(codeItem);
codeItem.setValue("second", "Code");
codeItem.setValue("2", "Name");
codelist.add(codeItem);
codeItem.setValue("third", "Code");
codeItem.setValue("3", "Name");
codelist.add(codeItem);
for (int j=0;j<codelist.size();j++)
{
System.out.println(codelist.get(j).getValue("Code")+'\t'+codelist.get(j).getValue("Name"));
}
I think the result should be first 1, second 2, thrid 3. But instead it's three lines of third 3. What's the issue? I'm really confused. Any help? Thanks.
Kris :
ArrayList<CompanyRecord> codelist=new ArrayList<CompanyRecord>();
CompanyRecord codeItem=new CompanyRecord();
codeItem.setValue("first", "Code");
codeItem.setValue("1", "Name");
odelist.add(codeItem);
codeItem.setValue("second", "Code"); #Overwritten existing object
codeItem.setValue("2", "Name");
codelist.add(codeItem);
codeItem.setValue("third", "Code"); #Overwritten existing object
codeItem.setValue("3", "Name");
codelist.add(codeItem);
for (int j=0;j<codelist.size();j++)
{
System.out.println(codelist.get(j).getValue("Code")+'\t'+codelist.get(j).getValue("Name"));
}
Its a mistake in your code. You are overwriting the same object with new values. You have to create a new CompanyRecord
object for each .add()
call of the list. Adding to a list does not remove the reference, what ever change you do on an object, it will reflect.
It must be like
CompanyRecord codeItem=new CompanyRecord();
codeItem.setValue("first", "Code");
codeItem.setValue("1", "Name");
codelist.add(codeItem);
codeItem=new CompanyRecord(); #create new object
codeItem.setValue("second", "Code");
codeItem.setValue("2", "Name");
codelist.add(codeItem);
......