Java LinkedList中的所有元素都与添加的元素具有相同的值
我正在学习用java实现链表类。 但每次调用get方法时,都会得到最后一个节点的内容。我不知道为什么。 代码如下: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
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);