[英]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.