Por que meu objeto de resultado circuito ArrayList está incorreta?

kk cria:

Eu crio um objeto ArrayList de CompanyRecord e valor de inserção nele. Mas quando eu ciclo dos dados é errado.

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;
    }
}

}

O código de circuito e inserto é:

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"));
    }

Eu acho que o resultado deve ser um primeiro, segundo 2, thrid 3. Mas em vez disso é três linhas de terceira 3. Qual é o problema? Estou realmente confuso. Qualquer ajuda? Obrigado.

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"));
    }

É um erro em seu código. Você está substituindo o mesmo objeto com novos valores. Você tem que criar um novo CompanyRecordobjeto para cada .add()chamada da lista. Somando-se uma lista não remove a referência, o que sempre mudar você faz em um objeto, ele irá refletir.

Deve ser como

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

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=277213&siteId=1
Recomendado
Clasificación