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

Java LinkedList中的所有元素都与添加的元素具有相同的值,java,linked-list,Java,Linked List,我正在学习用java实现链表类。 但每次调用get方法时,都会得到最后一个节点的内容。我不知道为什么。 代码如下: package learningLinkedLists; import java.util.LinkedList; public class LinkedLists { public static void main(String[] args) { Dummy d = new Dummy(0); LinkedList<Dummy> ll = new

我正在学习用java实现链表类。 但每次调用get方法时,都会得到最后一个节点的内容。我不知道为什么。 代码如下:

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

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


提前谢谢

获得相同输出的原因是,您两次存储相同的
对象
,创建两个不同的
虚拟对象
,然后存储它们

应该是

//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);
//创建第一个obj
假人d=新假人(0);
//创建第二个ojj
假人d2=新假人(0);
LinkedList ll=新建LinkedList();
//由于d和d2现在是两个不同的对象,因此对d的更改不会对d2产生影响,反之亦然
d、 SetData(1);
d2.设定数据(2);
11.加入(d);
11.加入(d2);
System.out.println(ll.get(1.data));
System.out.println(ll.get(0.data));

您将同一对象反复添加到列表中,然后更改其值。这就是为什么您会看到相同的值以及相同的内存地址


要解决此问题,请实例化不同的
Dummy
对象,并将它们放入列表中。

问题在于您正在多次更改
d
的内部状态,并将其添加到
链接列表中。您需要创建
Dummy

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

我没听懂你的意思。我已经更改了“d”的内容,然后将其存储在列表中。是的,因为对象值存储为引用,所以同一引用存储了两次。使链接列表中的2个元素指向同一对象谢谢!我错了,相信下面的答案。
//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);