LinkedList 对象如何使用 Syso 输出内容?

How LinkedList object output the content using Syso?

我写了一小段代码来实现一个链表数据结构。我有一个内部 class "Node",它有两个字段 Node 和 value。链表的构造函数接受 int 值参数并将该值分配给 Node 对象并将 Node 对象添加到 LinkedList 对象。

我的问题是 java.util.LinkedList 的哪个代码使列表对象打印为数字列表而不是其对象的地址?

As 当我打印 "list1" 时,输出是 [3,4]。 当我打印 "list" 时,输出是对象地址的哈希码。

我没有在 java.util.LinkedList class 中找到 toString()

如何让我的代码打印 LinkedList 的内容?

代码如下:

class LinkedList {

    Node first;

    Node getNode(){
        return new Node();
    }

    class Node{
        Node next;
        int value;
    }

    void add(int value){
        Node n=this.getNode();
        n.value=value;
        n.next=null;

        if (first==null){
            first=n;
        } else{
            first.next=n;
        }
    } 
}

public class LinkedListTest{
    public static void main(String[] args) {
        LinkedList list=new LinkedList();
        java.util.LinkedList<Integer> list1=new java.util.LinkedList<>();
        list1.add(3);
        list1.add(4);
        list.add(1);
        list.add(2);
        System.out.println(list);
        System.out.println(list1);
    }
}

您必须创建自己的 toString 方法,例如

class LinkedList {

    //...
    @Override
    public String toString() {
        StringBuilder text = new StringBuilder("[");
        String del = "";
        if (first != null) {
            do {
                text.append(del).append(first.value);
                first = first.next;
                del = ", ";
            } while (first != null);
        }
        text.append(']');
        return text.toString();
    }
}

如果您再次 运行 您的代码,输出

[1, 2]

您的 class LinkedList(我建议您重命名它,因为它可能会与 java.util.LinkedList 混淆)需要重写在打印中调用的方法 Object::toString输出到控制台。

I didn't find the toString() in java.util.LinkedList class.

有点侦探工作 - 你必须点击 LinkedList<E> which extends AbstractSequentialList<E> which extends AbstractList<E> which finally extends AbstractCollection<E> 的源代码(源代码)class 其中被覆盖的 Object::toString 方法负责类似字符串的表示所有的元素。在那里你可以得到灵感。

How can I make my code to print the content of LinkedList?

这样:

@Override
public String toString() {
    StringBuilder sb = new StringBuilder("[");
    if (first != null) {
        Node temp = first;
        String sep = "";
        while (temp != null) {
            sb.append(sep).append(temp.value);
            temp = temp.next;
            sep = ", ";
        }
    }
    return sb.append(']').toString();
}