有没有办法将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;
}
答案 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()。