当LinkedList是用户定义对象类型时,我们如何在java中迭代LinkedList?
我正在尝试打印添加到链接列表中的对象的内容。在此代码中,我的预期o/p为:100 20 300,但我得到:300。我错在哪里当LinkedList是用户定义对象类型时,我们如何在java中迭代LinkedList?,java,Java,我正在尝试打印添加到链接列表中的对象的内容。在此代码中,我的预期o/p为:100 20 300,但我得到:300。我错在哪里 import java.util.*; import java.lang.*; import java.io.*; class Body{ int i; public void setB(int i){ this.i = i; } } class Ideone { public static void main (String[] a
import java.util.*;
import java.lang.*;
import java.io.*;
class Body{
int i;
public void setB(int i){
this.i = i;
}
}
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Body b = new Body();
Body bdum;
LinkedList<Body> l = new LinkedList<Body>();
b.setB(100);
l.add(b);
b.setB(20);
l.add(b);
b.setB(300);
l.add(b);
Iterator<Body> li = l.iterator();
System.out.println(l.size());
System.out.println("List is:");
while(li.hasNext()){
bdum = li.next();
System.out.println(bdum.i);
}
}
}
问题在于:
b.setB(100);
l.add(b);
b.setB(20);
l.add(b);
b.setB(300);
l.add(b);
您正在变量b上使用相同的对象引用。您至少应该创建一个新的对象引用并指定值,然后将其添加到列表中
一种可能的解决办法是:
b.setB(100);
l.add(b);
b = new Body();
b.setB(20);
l.add(b);
b = new Body();
b.setB(300);
l.add(b);
另一种解决方案可能是在类中设置构造函数,该构造函数将在Body类中设置i字段:
然后在类中直接添加Body的新实例:
//b.setB(100);
l.add(new Body(100));
//b.setB(20);
l.add(new Body(200));
//b.setB(300);
l.add(new Body(300));
创建单个实体对象并将其添加到列表中三次。您应该创建三个不同的对象。即:
b.setB(100);
l.add(b);
b = new Body();
b.setB(20);
l.add(b);
b = new Body();
b.setB(300);
l.add(b);
在此代码中:
Body b = new Body();
Body bdum;
LinkedList<Body> l = new LinkedList<Body>();
b.setB(100);
l.add(b);
b.setB(20);
l.add(b);
b.setB(300);
l.add(b);
您可能认为已将3项添加到LinkedList中,但实际上只有一项添加到列表中,因为您多次使用同一对象引用。您正在更改b的同一实例上的值。您需要创建不同的实例并设置如下值:
Body b1 = new Body();
b1.setB(100);
l.add(b1);
Body b2 = new Body();
b2.setB(20);
l.add(b2);
Body b3 = new Body();
b3.setB(300);
l.add(b3);
副注释的可能副本,也可以考虑在体类中重写等值方法,这是在比较存储在列表中的体对象时需要的。如果重写等于,则也重写哈希代码
Body b1 = new Body();
b1.setB(100);
l.add(b1);
Body b2 = new Body();
b2.setB(20);
l.add(b2);
Body b3 = new Body();
b3.setB(300);
l.add(b3);