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();
}
我写了一小段代码来实现一个链表数据结构。我有一个内部 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();
}