【问题标题】:Displaying ArrayList objects?显示 ArrayList 对象?
【发布时间】:2014-04-27 10:37:45
【问题描述】:

我有一个充满 LinkedLists 的 ArrayList,我需要能够在该 arraylist 中显示特定的链表。

        for(int i=0;i<my_lists.size();i++){
        System.out.println(my_lists.get(my_lists.size()));
    }

这显示在输出中:

kruskal.LinkedList@a4aad7f

kruskal.LinkedList@2cc47220

kruskal.LinkedList@1520a9d6

kruskal.LinkedList@136e2b70

kruskal.LinkedList@25e5d007

kruskal.LinkedList@12bc8f01

kruskal.LinkedList@19509443

作为我的输出。为什么它不显示我的链接列表?

这是我的 LinkedList 类:

package kruskal;

public class LinkedList {

Node head;

public LinkedList(){
    this.head = null;
}

public void add (Object newData){
    Node cache = head;
    Node current = null;

    if (cache == null)
        current = new Node(newData, null);
        else {


    while ((current = cache.next) != null)
        cache = cache.next;

    cache.next = new Node(newData,null);
        }
}

public Object getFront(){
    return this.head.data;
}

}

【问题讨论】:

  • linkList 持有什么类型的对象?
  • 因为您正在打印arrayList 中的元素,它们是linkedList,因此您打印的是每个linkedList 地址,而不是它的元素。
  • my_lists.get(my_lists.size()) 如何不抛出索引越界异常?
  • 对原始发帖人的忠告:让您的 LinkedList 扩展 java.util.AbstractList,然后您将拥有一个有效的 toString() 实现以及一堆其他东西。

标签: java arrays list arraylist linked-list


【解决方案1】:

由于 LinkedList 是一个对象,所以当您使用System.out.println 打印该对象时,会调用toString() 方法。由于您的类没有toString() 方法,因此调用其父类'toString(),在这种情况下很可能是Object。

因此,您需要覆盖 LinkedList 类中的 toString() 方法并以您想要的方式打印对象。

【讨论】:

  • 仔细看一下:条目的开头是这样的:kruskal.LinkedList - 我们在这里不处理来自 JDK 的标准 LinkedList。 :)
  • 那么我该如何为我的链表类创建一个 toString 方法呢?
【解决方案2】:

在您的代码中,这行 my_lists.get(my_lists.size()) 必须给您错误,因为您正在读取索引 my_lists.size() 处的对象,该对象永远不存在并给出像 Index Out of bounds exception 这样的错误。
您需要在 for 循环内的循环中读取 LinkedList。

for(int i=0;i<my_lists.size();i++){
    LinkedList link = my_lists.get(i)
    //Read value from LinkedList here  
    for(int j=0;j<link.size();j++){    
        //I dont know what type of object stoer in your linked list so i get it in Object
        Object obj = link.get(j);  //read your value here as per data type stored. 
        System.out.println(obj);
    }
}

【讨论】:

  • 好像不像link.size和link.get
  • 请提供完整代码以便我们发现问题。
【解决方案3】:

问题是您还没有覆盖 toString() 类中的 LinkedList 方法。

覆盖toString() 并让它遍历列表,返回每个元素的toString() 值的CSV(如java.util.LinkedList 的实现)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 2016-09-14
    • 2014-03-04
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多