【问题标题】:How do I display the contents of a Linked List in Java? [duplicate]如何在 Java 中显示链表的内容? [复制]
【发布时间】:2012-04-15 21:58:46
【问题描述】:

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

我尝试了以下操作:

System.out.println(list);

但它会打印出一些奇怪的值,例如ADTList@,然后是一些乱码。

【问题讨论】:

  • 如果您通过扩展 AbstractSequentialList 创建链接列表,您将免费获得所需的行为,因为它由祖父母 AbstractCollection 实现。

标签: java


【解决方案1】:
for(Object o : list){
    System.out.println(o);
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      “ADTList@(后跟一些乱码)”是由默认的toString() 方法创建的。覆盖它以打印有用的东西。这可能需要在列表实现和元素中都进行覆盖。

      假设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(", ");
          }
      }
      

      正如 Christoffer Hammarström 在他的评论中提到的那样,这是从 JDK 的 AbstractCollection 类复制而来的。它添加字符以使其类似于列表,例如"[x,y,z]" 并且还处理包含自身的列表。

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          您需要对其进行迭代才能看到内容。

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

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

          【讨论】:

          • +1 System.out.println(obj); 就足够了,因为println() 会在内部调用toString()
          • 这是正确的。我将编辑我的回复
          • 我这样做了,但是它告诉我我只能遍历一个数组。
          【解决方案6】:

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

          List<String> list = new LinkedList<>();
          //Fill the list 
          
          for (String s : list)
               System.out.println(s);
          

          【讨论】:

            【解决方案7】:

            如果您已经创建了自己的链表实现(有什么理由这样做?),如果您想在用户中打印列表的内容,还需要覆盖 toString() 的默认行为友好的方式。

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

            【讨论】:

            • 谢谢!!我向我的 Node 和 ADTlist 类添加了一个 toString 方法,它就可以工作了!特别感谢您和其他所有人!
            【解决方案8】:

            重写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("*** ******** ***");
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-07-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-06-03
              • 2011-06-07
              • 2012-12-05
              相关资源
              最近更新 更多