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
答案 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());
}