LinkedList中的所有元素与添加的元素具有相同的值

问题描述:

我试图学习java中链接列表类的实现。 但每次我调用get方法时,我都会得到Last Node的内容。我无法弄清楚为什么。 的代码如下,LinkedList中的所有元素与添加的元素具有相同的值

package learningLinkedLists; 
import java.util.LinkedList; 

public class LinkedLists { 
public static void main(String[] args) { 
    Dummy d = new Dummy(0); 
    LinkedList<Dummy> ll = new LinkedList<Dummy>(); 


    d.SetData(1); 
    d.printData(); 
    ll.add(d); 


    d.SetData(2); 
    d.printData(); 
    ll.add(d); 

    d.SetData(3); 
    ll.add(d); 

    System.out.println(ll); 
    System.out.println(ll.get(1).data); 
    System.out.println(ll.get(0).data); 
    System.out.println(ll.size()); 
} 

} 

我得到的输出,

1 
2 
[[email protected],[email protected], 
[email protected]] 
3 
3 
3 

我想在一个类中添加一些数据,并创建该类的链接列表。

在此先感谢!

+0

请相信以下答案。 – AmitG 2013-03-24 06:02:11

为什么你所得到的相同输出的原因是因为你存储同一object twice,创建2个不同dummy objs,然后存储它们

应该是这样

//Creating the first obj 
Dummy d = new Dummy(0); 
//Creating second ojj 
Dummy d2 = new Dummy(0); 
LinkedList<Dummy> ll = new LinkedList<Dummy>(); 


//Since d and d2 are now 2 different objects, a change to d would not have a impact on d2 and vice versa 
d.SetData(1); 
d2.SetData(2); 
ll.add(d); 
ll.add(d2); 

System.out.println(ll.get(1).data); 
System.out.println(ll.get(0).data); 
+0

我没有得到你。我已经改变了'd'的内容,然后我将它存储在列表中。 – SureshS 2013-03-24 05:56:03

+1

是的,因为对象值被存储为引用,所以相同的引用被存储两次。导致链接列表中的2个元素指向相同的对象 – Akash 2013-03-24 05:59:36

+0

谢谢!我得到了错误的地方。 – SureshS 2013-03-24 06:02:52

你加入同一个对象一遍又一遍,然后改变它的值。这就是为什么你看到相同的值以及相同的内存地址。

为了解决这个问题,实例化不同的Dummy对象并将它们放入列表中。

问题是您正在更改d的内部状态并将其添加到LinkedList多次。您需要创建Dummy的新实例。

它没有显示最后一个节点的内容,但是您已将值赋值为3到同一节点(虚拟)。创建一个Dummy类的新实例并为其分配一个值并将其添加到列表中。这将工作。