【问题标题】:How LinkedList object output the content using Syso? [duplicate]LinkedList 对象如何使用 Syso 输出内容? [复制]
【发布时间】:2018-12-02 19:41:53
【问题描述】:

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

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

当我打印“list1”时,输出为 [3,4]。 当我打印“列表”时,输出是对象地址的哈希码。

我在java.util.LinkedList 类中没有找到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);
    }
}

【问题讨论】:

  • LinkedList 类需要一个toString() 函数。您要添加的对象的类也需要一个。在这种情况下,您正在添加已经具有 toString()Integer 对象。

标签: java list java-8 linked-list tostring


【解决方案1】:

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

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

有点侦探工作 - 你必须点击 LinkedList&lt;E&gt; 的源代码,它扩展了 AbstractSequentialList&lt;E&gt;,它扩展了 AbstractList&lt;E&gt;,它最终扩展了 AbstractCollection&lt;E&gt;(源代码)类,其中被覆盖的 Object::toString 方法负责所有元素的类似字符串的表示。在那里你可以得到启发。

如何让我的代码打印 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();
}

【讨论】:

    【解决方案2】:

    例如,您必须创建自己的 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]
    

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 2014-03-05
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多