Why my Object ArrayList loop result is incorrect?

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

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=216928&siteId=1