Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当LinkedList是用户定义对象类型时,我们如何在java中迭代LinkedList?_Java - Fatal编程技术网

当LinkedList是用户定义对象类型时,我们如何在java中迭代LinkedList?

当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

我正在尝试打印添加到链接列表中的对象的内容。在此代码中,我的预期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[] 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);