繁体   English   中英

Java链表打印

[英]Java linked list printing

是否有任何方法可以将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;
}

我将使用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);
}

否。在Java 6中无法做到这一点。未来的Java? 不知道 :-)

您执行此操作的方式几乎完全是实现它的简洁方式。

您显示的代码非常业余。 串联成字符串只是主要的红色标记。

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

return Arrays.deepToString(toArray());

当然,这取决于列表元素本身具有明智的toString()方法。

您可以将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 : "") + "]";
    }
}

这样,它将递归打印节点。

反过来,只要打印this函数即可替换print()函数,因为System.out.println(object)返回String.valueOf(object) ,而String.valueOf(object)返回object != null ? object.toString() : "null" object != null ? object.toString() : "null"

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

这样做的原因是,如果您要编写许多子类以不同的方式报告为字符串,则只需要重写每个子类的toString()函数,而不必重写toString()和print()功能。 如果您希望print()和toString()具有不同的功能,则没有理由不能仅覆盖print()使其不调用toString()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM