Java链表打印

时间:2010-07-15 18:43:34

标签: java linked-list

有没有办法将print()toString()缩写为Java链接列表函数中的一个函数,或者有没有解释为什么有人会这样格式化?

public void print() {
    System.out.println(this.toString());
}

@Override
public String toString() {
    String display = "";
    LinkedList current = this;
    while (current != null) {
        display += new Integer(current.head).toString() + ",";
        current = current.tail;
    }
    display = display.substring(0, display.length()-1);
    return display;
}

5 个答案:

答案 0 :(得分:4)

我会使用StringBuilder,因为它更有效率:

public void print() {
    System.out.println(this.toString());
}

@Override
public String toString() {
    StringBuilder display = new StringBuilder();
    for(Integer current: this) {
        display.append(current).append(',');
    }
    return display.toString().substring(0, display.length()-1);
}

答案 1 :(得分:1)

没有。在Java 6中没有办法做到这一点。未来的Javas?不知道。 : - )

你这样做的方式,实现它的几乎是更简洁的方式。

答案 2 :(得分:1)

你所展示的代码是非常业余的。连接成一个字符串只是主要的红旗。

如果您不太关心性能,可以将整个列表字符串化为一行代码:

return Arrays.deepToString(toArray());

当然,这取决于列表中具有合理toString()方法的元素。

答案 3 :(得分:1)

您可以在代表链接列表节点的类中添加toString()

class Node<T> {
    T value;
    Node<T> next;

    public String toString() {
        return value + (next != null ? ", " + next : "");
    }
}

然后按如下方式实现链接列表的toString()

public class LinkedList<T> {
    Node<T> head;

    public String toString() { 
        return "[" + (head != null ? head : "") + "]";
    }
}

这样它会以递归方式打印节点。

print()功能可以通过打印this来替换,因为引擎盖下的System.out.println(object)会返回String.valueOf(object),而{{3}}会在引擎盖下返回object != null ? object.toString() : "null"

public void print() {
    System.out.println(this);
}

答案 4 :(得分:0)

这样做的原因是,如果你想编写一些以不同方式报告自己为字符串的子类,你只需要在每个子类上覆盖toString()函数,而不是toString()和print()函数。如果你想让print()和toString()具有不同的功能,你没有理由不能只覆盖print()使它不能调用toString()。