如何在Java中显示链表的内容?

如何在Java中显示链表的内容?,java,Java,在Java中,我创建了一个链表类并添加了一组值。但我不知道如何显示这些值 我试着做了以下几点: System.out.println(list); 但是它输出了一些奇怪的值,比如ADTList@后跟一些jibberish。默认的toString()方法创建了“ADTList@(后跟一些jibberish)”。覆盖此选项以打印有用的内容。这可能需要在列表实现和元素中重写 假设ADTList是您自己的链表实现,那么它的toString方法可以如下所示: @Override public Strin

在Java中,我创建了一个链表类并添加了一组值。但我不知道如何显示这些值

我试着做了以下几点:

System.out.println(list);
但是它输出了一些奇怪的值,比如
ADTList@
后跟一些jibberish。

默认的
toString()
方法创建了“ADTList@(后跟一些jibberish)”。覆盖此选项以打印有用的内容。这可能需要在列表实现和元素中重写

假设
ADTList
是您自己的链表实现,那么它的
toString
方法可以如下所示:

@Override
public String toString() {
    Iterator<Object> i = iterator();
    if (! i.hasNext()) {
        return "[]";
    }

    StringBuilder sb = new StringBuilder();
    sb.append('[');
    for (;;) {
        Object element = i.next();
        sb.append(e == this ? "(this Collection)" : element);
        if (! i.hasNext()) {
            return sb.append(']').toString();
        }
        sb.append(", ");
    }
}
@覆盖
公共字符串toString(){
迭代器i=迭代器();
如果(!i.hasNext()){
返回“[]”;
}
StringBuilder sb=新的StringBuilder();
某人附加(“[”);
对于(;;){
对象元素=i.next();
sb.append(e==this?”(this Collection)”:元素);
如果(!i.hasNext()){
返回sb.append(']').toString();
}
某人加上(“,”);
}
}
正如Christoff Hammarström在评论中提到的那样,这是从JDK的
AbstractCollection
类复制而来的。它添加字符使其成为类似于“[x,y,z]”的列表,并处理包含自身的列表


还值得一提的是,默认
toString
中的“胡言乱语”实际上是有意义的。它是对象作为实例的类的名称,以及对象的
hashCode
的十六进制值,其中默认的
hashCode()
,将表示一个内存位置。

您必须遍历链接列表中的所有项并打印它们的值,否则,覆盖每个项目的
toString
方法。

您必须通过调用迭代器()在该列表上获得一个迭代器。然后调用next()获取元素,直到hasNext()返回false

Iterator<Object> i = list.iterator();
while(i.hasNext())
    System.out.print(i.next()+"\t");
Iterator i=list.Iterator();
while(i.hasNext())
System.out.print(i.next()+“\t”);

您需要对其进行迭代以查看内容

for(Object obj : list) {
  System.out.println(obj);
}

但是您的对象需要覆盖.toString()。

您可以打印列表中执行for each循环的每个值:

List<String> list = new LinkedList<>();
//Fill the list 

for (String s : list)
     System.out.println(s);
List List=newlinkedlist();
//填写清单
用于(字符串s:列表)
系统输出打印项次;

如果您已经创建了自己的链表实现(您这样做的原因是什么?),如果希望以用户友好的方式打印列表内容,还需要覆盖
toString()的默认行为


如果使用
java.util
中提供的
LinkedList
,则问题中显示的代码行将按预期打印。

覆盖
toString
方法,并编写自己的实现来打印关于该方法的有用信息

public String toString(){
   System.out.println("*** CONTENTS ***");
   for(Object obj: this){
     System.out.println(obj);
     //May be you will be required to override toString in your custom domain class to make it more useful
   }

   System.out.println("*** ******** ***");
}

+1
System.out.println(obj)
就足够了,因为
println()
将在内部调用
toString()
。这是正确的。我会编辑我的回复,但是它告诉我我只能在数组上迭代。如果你通过扩展
AbstractSequentialList
创建链表,你可以免费获得所需的行为,因为它是由祖父母
AbstractCollection
实现的。谢谢!!我在我的节点和ADTlist类中都添加了一个toString方法,它可以正常工作!特别感谢您,也感谢所有其他人!
public String toString(){
   System.out.println("*** CONTENTS ***");
   for(Object obj: this){
     System.out.println(obj);
     //May be you will be required to override toString in your custom domain class to make it more useful
   }

   System.out.println("*** ******** ***");
}