【问题标题】:All elements in LinkedList have same value as element added [duplicate]LinkedList 中的所有元素与添加的元素具有相同的值[重复]
【发布时间】:2013-03-13 19:15:41
【问题描述】:

我正在尝试学习 Java 中 Linked List 类的实现。 但是每次调用get方法时,都会得到Last Node的内容。我不知道为什么。 代码如下,

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
[learningLinkedLists.Dummy@3b061299,learningLinkedLists.Dummy@3b061299,
learningLinkedLists.Dummy@3b061299]
3
3
3

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

提前致谢!

【问题讨论】:

  • 相信以下答案。

标签: java linked-list


【解决方案1】:

你得到相同输出的原因是因为你存储相同的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);

【讨论】:

  • 我没听懂你。我已经更改了“d”的内容,然后将其存储在列表中。
  • 是的,因为对象值被存储为引用,同一个引用被存储了两次。导致链表中的2个元素指向同一个对象
  • 谢谢!我找到了错误的地方。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-13
        • 2017-03-24
        • 2018-01-15
        • 1970-01-01
        • 1970-01-01
        • 2018-08-15
        相关资源
        最近更新 更多