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



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

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

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

我在班上没有找到java.util.LinkedListtoString()

如何使我的代码打印链表的内容?

下面是代码:

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(我建议您重命名它,因为它可能会与java.util.LinkedList混淆(需要覆盖方法Object::toString,该方法在打印输出到控制台时调用。

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

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

如何使我的代码打印链表的内容?

这边:

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

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

最新更新