LinkedList在Java中使用add方法

时间:2017-11-25 15:35:54

标签: java list

Data

每当我修改LinkedList<CasosPossiveis> casos = new LinkedList<>(); CasosPossiveis objeto = new CasosPossiveis(); for (int i=0; i<10; i) { //modifying objeto values here casos.add(objeto); } 值时,casos中的每个位置也会被修改。我相信objeto正在使用casos.add(objeto)的引用。我需要的是每次向objeto添加新对象并修改casos时,它都不会修改已添加到列表中的值。

例:

objeto

我打印casos时的期望:

objeto.setId=1;
casos.add(objeto);
objeto.setId=2;
casos.add(objeto);

我的代码是什么:

1, 2

4 个答案:

答案 0 :(得分:4)

您在每个casos添加相同的对象,请尝试以下方法:

  LinkedList<CasosPossiveis> casos = new LinkedList<>();

     for (int i=0; i<10; i) {
     CasosPossiveis   objeto = new CasosPossiveis();
     //modifying objeto values here
      casos.add(objeto);
 }

答案 1 :(得分:2)

您有一个对象objecto,您可以多次将其添加到列表中。如果您希望列表包含不同的实例,则必须创建新的实例:

for (int i=0; i<10; i) {
    // Use a new instance in every iteration
    CasosPossiveis objeto = new CasosPossiveis();

    //modifying objeto values here

    casos.add(objeto);
}

答案 2 :(得分:1)

小错误。您只创建一次CasosPossiveis的对象。当java运行此代码时,它会在for循环之前创建对象。

现在,当处理for循环时,它正在使用同一个对象10次。因此价值相同。 因此,每次获取一个新对象时,您需要在每次循环运行时创建对象。

要实现这一目标 - 写 CasosPossiveis objeto = new CasosPossiveis(); 内循环。

答案 3 :(得分:0)

您在列表中添加CassosPositives类的相同实例,您在列表中的每个位置都有相同对象的多个链接,而不是每次将它放在列表中时都需要创建类的新实例:

类CassosPositives应该是:

public class CassosPositives {
    private int id;

    CassosPositives(int id) {
        this.id = id;
    }

    public int getId() { 
        return id; 
    }

    public void setId(int id) { 
        this.id = id; 
    }

}   

实施例 (java 8方式)

        // create list of CassosPositives
        List<CassosPositives> casos = IntStream.iterate(0, i -> i + 1)
                                                .limit(10)
                                                .map(i -> new CassosPositives(i))
                                                .collect(Collectors.toList());
        //print list of CassosPositives
        casos.forEach(caso -> System.out.println(caso.getId()));    

实施例 (java 7方式)

    // create list of CassosPositives
    List<CassosPositives> casos = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        casos.add(new CassosPositives(i));
    }

    //print list of CassosPositives
    for(CassosPositives caso : casos) {
        System.out.println(caso.getId());
    }