这个问题来自作业。我必须在创建循环链接列表的类中覆盖toString()方法,实际上我有一个工作得很好的toString()方法,它将所有测试都传递给所有东西。所以我的项目是自动进行的,它显然不赞成我的方法100%。所以我的问题是:有没有更好的方法来编写这个更有效的toString()方法?
public String toString()
{
if (size == 0)
{
return "[]";
}
else
{
String output = "";
Node<E> tempNode = actualElement;
while (tempNode.next() != actualElement)
{
if (output.equals(""))
{
output = "[" + output + tempNode.data().toString();
tempNode = tempNode.next();
}
else
{
output = output + ", " + tempNode.data().toString();
tempNode = tempNode.next();
}
}
output = output + ", " + tempNode.data().toString() + "]";
return output;
}
如果我需要详细说明课程结构,以便更有意义,请告诉我。
答案 0 :(得分:4)
StringBuilder builder = new StringBuilder();
builder.append("some text");
builder.append("more text");
return builder.toString();
答案 1 :(得分:0)
为了进一步改进,您可以使用StringBuilder并附加每个计算的字符串文字。这样可以节省JVM创建单个String文字的负载,从而提高性能。
答案 2 :(得分:0)
首先,您应该使用StringBuilder来串联字符串。
看看这里:
http://javarevisited.blogspot.co.at/2011/07/string-vs-stringbuffer-vs-stringbuilder.html
StringBuilder sb = new StringBuidler();
Node<E> tempNode = actualElement;
while (tempNode.next() != actualElement)
{
if (sb.length() == 0)
{
sb.append("[").append(tempNode.data().toString());
}
else
{
sb.append(", ").append(tempNode.data().toString());
}
tempNode = tempNode.next();
}
sb.append(", ").append(tempNode.data().toString()).append("]");
return sb.toString();
答案 3 :(得分:0)
答案 4 :(得分:0)
使用StringBuilder
可能会帮助您。这是从AbstractCollection.toString()
复制的代码段,请看一下。
public String toString() {
Iterator<E> i = iterator();
if (! i.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
}
答案 5 :(得分:0)
我认为actualElement
是在类的其他地方定义的,虽然更好的名称可能更好。 if (output.equals(""))
是不必要的。只需使用[开始输出StringBuilder
,然后添加到它。
但是,您依赖于您的列表实际上是循环的。如果此列表最终没有循环,您将获得NPE。并且,如果列表看起来更像6,如[A,B,C,D,E,C,D,E ...],那么循环将永远不会结束。