【问题标题】:Array List showing only most recent object added [duplicate]仅显示最近添加的对象的数组列表[重复]
【发布时间】:2019-01-18 05:12:11
【问题描述】:
package com.snapfires.pdf;

public class FultonObj {
    private String fileNo;
    private String parcelId;
    private String situs;


    public String getFileNo() {
        return fileNo;
    }
    public void setFileNo(String fileNo) {
        this.fileNo = fileNo;
    }
    public String getParcelId() {
        return parcelId;
    }
    public void setParcelId(String parcelId) {
        this.parcelId = parcelId;
    }
    public String getSitus() {
        return situs;
    }
    public void setSitus(String situs) {
        this.situs = situs;
    }

}



package com.snapfires.pdf;

import java.util.ArrayList;

public class List {

    public static void main(String arg[]) {

    ArrayList<FultonObj> list = new ArrayList<FultonObj>(); 
    FultonObj fuOb = new FultonObj();

    String file1 = "file#1";
    String file2 = "file#2";
    String file3 = "file#3";
    String parcelId1 = "parcelId1";
    String parcelId2 = "parcelId2";
    String parcelId3 = "parcelId3";
    String situs1 = "situs1";
    String situs2 = "situs2";
    String situs3 = "situs3";

        fuOb.setFileNo(file1);
        fuOb.setParcelId(parcelId1);
        fuOb.setSitus(situs1);
        list.add(fuOb);

        fuOb.setFileNo(file2);
        fuOb.setParcelId(parcelId2);
        fuOb.setSitus(situs2);
        list.add(fuOb);

        fuOb.setFileNo(file3);
        fuOb.setParcelId(parcelId3);
        fuOb.setSitus(situs3);
        list.add(fuOb);

    for(int b=0; b<list.size(); b++) {
        System.out.println(list.get(b).getFileNo());
        System.out.println(list.get(b).getParcelId());
        System.out.println(list.get(b).getSitus());
    }   

    }

}

当我运行这个小程序时,我只得到添加到列表中的最后一个对象。虽然它遍历列表,但结果是它打印出最后添加的对象。例如

file#3
parcelId3
situs3
file#3
parcelId3
situs3
file#3
parcelId3
situs3

我希望添加到列表中的所有对象都存在,而不仅仅是最后一个对象。有人可以告诉我为什么这没有发生吗?

我认为每次创建新的 FultonObj 对象都不会解决我的问题。这就是为什么。我正在阅读一个文本文件,其中一行可能只有 file#,第二行可能只有 file# 和 parcelId,第三行可能有 file#、parcelId、situs。或每行文件#、parcelId、位置的任意组合。但是顺序始终相同,这意味着您将始终拥有:file#、parcelId、situs。所以我需要确保 fuOb 是完整的,然后再将其添加到 ArrayList。如果我创建了多个 fuOb,则可能没有一个 fuOb 是完整的,这意味着它具有 file#、parcelId、situs。

【问题讨论】:

  • 您正在添加对同一对象的引用
  • 每次设置数据时创建新的FultonObj 对象。像 FultonObj fuOb1 = new FultonObj(); fuOb.setFileNo(file1); fuOb.setParcelId(parcelId1); fuOb.setSitus(situs1); list.add(fuOb1); FultonObj fuOb2 = new FultonObj(); fuOb.setFileNo(file2); fuOb.setParcelId(parcelId2); fuOb.setSitus(situs2); list.add(fuOb2);

标签: java arrays


【解决方案1】:

你的程序应该是这样的。每次您在 fuOb 中设置数据时,它都会覆盖以前的数据..

FultonObj fuOb1 = new FultonObj(); 
fuOb1.setFileNo(file1); 
fuOb1.setParcelId(parcelId1); 
fuOb1.setSitus(situs1); 
list.add(fuOb1); 

FultonObj fuOb2 = new FultonObj(); 
fuOb2.setFileNo(file2); 
fuOb2.setParcelId(parcelId2); 
fuOb2.setSitus(situs2); 
list.add(fuOb2);

【讨论】:

  • 你甚至可以使用 FultonObj[] fuObs 数组;
【解决方案2】:

制作三个FultonObj不要使用一个

    fuOb1.setFileNo(file1);
    fuOb1.setParcelId(parcelId1);
    fuOb1.setSitus(situs1);
    list.add(fuOb1);

    fuOb2.setFileNo(file2);
    fuOb2.setParcelId(parcelId2);
    fuOb2.setSitus(situs2);
    list.add(fuOb2);

    fuOb3.setFileNo(file3);
    fuOb3.setParcelId(parcelId3);
    fuOb3.setSitus(situs3);
    list.add(fuOb3);

【讨论】:

  • 我通过创建新的 FultonObj 并将另一个 FultonObj 的内容移动到新创建的 FultonObj 中,然后将这个新的 FultonObj 添加到 ArrayList 中解决了这个问题。这将防止仅将最后一个 FultonObj 对象添加到 ArrayList。
猜你喜欢
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
相关资源
最近更新 更多