ArrayList到底是null

时间:2015-06-20 15:54:16

标签: java arraylist

我从表单中收集一些值,我将它们添加到ArrayList然后创建一个对象。

     ArrayList<Integer> machines = new ArrayList<>();
     ArrayList<WorkPosition> workPositions = new ArrayList<>();

     for (int i=1; i<=positions; i++){
            fname1 = "position"+i+"-1";
            fname2 = "position"+i+"-2";
            fname3 = "position"+i+"-3"

            m1 = Integer.parseInt(request.getParameter(fname1));
            m2 = Integer.parseInt(request.getParameter(fname2));
            m3 = Integer.parseInt(request.getParameter(fname3));

            if(m1!=0)
                machines.add(m1);
            if(m2!=0)
                machines.add(m2);
            if(m3!=0)
                machines.add(m3);

            WorkPosition workPosition = new WorkPosition(0, i, machines, false, date); //Here I create the Object 
            workPositions.add(workPosition);

            machines.clear();

        }

在我创建对象(键入WorkPosition)并将其添加到我的列表后,我删除了ArrayList机器,因此将在第二个循环中创建的下一个对象没有上一个对象的元素。但是,当我在循环结束时打印arraylist机器以查看它具有的内容

   for(WorkPosition i:workPositions){
         System.out.println("WorkPosition " +i.getWorkPosition() + " :" + " Machines{ "+ i.getMachines() +" }");
   }

在班级机器中,我有这个吸气剂:

public class WorkPosition {

    private int workPosition;
    ArrayList<Integer> machines = new ArrayList<>();

    //more code...


    public ArrayList<Integer> getMachines() {
        return machines;
    }

我得到这个印刷品:

WorkPosition 1 : Machines{ [] }
WorkPosition 2 : Machines{ [] }

任何想法为什么会发生这种情况?如果我删除了machines.clear();我得到了这个输出:

WorkPosition 1 : Machines{ [1, 15] }
WorkPosition 2 : Machines{ [1, 15] }

然而,欲望输出将是:

WorkPosition 1 : Machines{ [1] }
WorkPosition 2 : Machines{ [15] }

更新 我将ArrayList<Integer> machines = new ArrayList<>();放在循环中并删除machines.clear()并且它有效..

1 个答案:

答案 0 :(得分:2)

创建WorkPosition时,为其提供对机器的引用。因此,当您调用machines.clear()时,也会清除WorkPosition中的机器ArrayList。

相反,您应该将机器设置为新的ArrayList:

machines = new ArrayList<Integer>();

这将清除机器,同时保持WorkPosition中的ArrayList不变。