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