【问题标题】:ArrayList toString() methodArrayList toString() 方法
【发布时间】:2014-05-04 01:57:52
【问题描述】:

我有一个包含多个 LinkedList 对象的数组列表。我的主要代码是:

import java.io.*;
import java.util.AbstractList;
import java.util.*;

public class Sort {
public static void main (String[] args){
    int listNum = 0;
    File file = new File("input.txt");

    ArrayList<LinkedList> my_lists = new ArrayList<LinkedList>();

    try {
        Scanner sc = new Scanner(file);
        while (sc.hasNextLine()) {

            System.out.println("List" + listNum);
            String line = sc.nextLine();
            LinkedList the_list = new LinkedList();
            String[] templist = line.split("\\s*,\\s*");

            for(int i=0; i<templist.length; i++){
                String temp = templist[i];
                the_list.add(temp);
                System.out.println(temp);
            }
            listNum++;
            my_lists.add(the_list);


        }
        sc.close();
    } 
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }

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

}

这是我的 LinkedList 对象类:

package kruskal;
import java.util.AbstractList;

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;
}

}

还有我的节点类:

package kruskal;

public class Node {
public Object data;
public Node next;

public Node(Object data,Node next){
    this.data=data;
    this.next=next;
}
}

在我的主要代码部分结束时,我尝试执行一个 for 循环来显示我的 ArrayList 中的每个 LinkedList,但我只获得了 LinkedLists 的地址:

kruskal.LinkedList@2cc47220
kruskal.LinkedList@1520a9d6
kruskal.LinkedList@136e2b70
kruskal.LinkedList@25e5d007
kruskal.LinkedList@12bc8f01
kruskal.LinkedList@19509443
kruskal.LinkedList@7935c7b0

知道为什么我的 toString() 方法不起作用吗?我假设我需要 LinkedList 类中的方法,但我会返回什么?

【问题讨论】:

  • 因为您还没有在 LinkedList 类中重写 toString 方法。

标签: java arrays list arraylist linked-list


【解决方案1】:

您需要覆盖您的LinkedListtoString 方法。
你可以这样做:

@Override
public String toString() {
    String res = "[";
    Node current = this.head;
    while(current != null) {
        res += current.toString() + "\t";
        current = current.next;
    }

    res += "]";
    return res;
}

当然...然后您还必须覆盖 Node#toString ;)

示例代码:

@Override
public String toString() {
    return data.toString();
}

【讨论】:

  • 我现在得到一个空指针异常。我的输出是否仍然需要 System.out.println(my_lists.get(i).toString()); ?
  • 是的,你应该继续使用这个电话!我的代码实际上有问题。我刚刚更新了我的答案。你能试试那个新版本吗?
【解决方案2】:

问题是你的LinkedList 类中没有定义toString() 方法,所以它继承了the toString() method from Object,它负责你看到的输出。

换句话说,这个方法返回一个字符串等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())

LinkedList 中覆盖toString() 并返回您希望看到打印的String

【讨论】:

  • 我希望能够返回我的 ArrayList (my_lists[i]) 中包含的指定 (i) LinkedList。我会直接返回 my_lists[i] 吗?
猜你喜欢
  • 2017-08-07
  • 2015-11-01
  • 2016-10-18
  • 2015-02-26
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
相关资源
最近更新 更多