在Java中使用LinkedList添加方法
问题描述:
LinkedList<CasosPossiveis> casos = new LinkedList<>();
CasosPossiveis objeto = new CasosPossiveis();
for (int i=0; i<10; i) {
//modifying objeto values here
casos.add(objeto);
}
每次我修改objeto
值时,casos中的每个位置也正在修改中。我相信casos.add(objeto)
正在使用objeto
的参考。我需要的是每当我添加一个新对象到casos
并修改objeto
时,它不会修改已经添加到列表中的值。在Java中使用LinkedList添加方法
例:
objeto.setId=1;
casos.add(objeto);
objeto.setId=2;
casos.add(objeto);
我期待什么,当我打印casos:
1, 2
什么我的代码被priting:
2, 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);
}
答
您在每casos
添加相同的对象,试试这个:
LinkedList<CasosPossiveis> casos = new LinkedList<>();
for (int i=0; i<10; i) {
CasosPossiveis objeto = new CasosPossiveis();
//modifying objeto values here
casos.add(objeto);
}
答
小错误。您只创建一次CasosPossiveis的对象。当java运行这段代码时,它会在for循环之前创建对象。
现在当for循环被处理时,它使用同一个对象10次。因此相同的价值。 因此,每次获取新对象时,都需要在每次循环运行时创建对象。
为了实现这一点 写入 CasosPossiveis objeto = new CasosPossiveis(); 内部for循环。
答
您添加列表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 way)
// 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());
}
在循环内部创建对象。 –