Java中的toString重写

Java中的toString重写,java,performance,tostring,Java,Performance,Tostring,这个问题来自一项作业。我必须在一个创建循环链表的类中重写一个toString方法,实际上我有一个非常有效的toString方法,它通过了我所有的测试。因此,我的项目是自动签名的,它显然不赞成我的方法100%。所以我的问题是:有没有更好的方法来编写这个toString方法,这样会更有效 public String toString() { if (size == 0) { return "[]"; }

这个问题来自一项作业。我必须在一个创建循环链表的类中重写一个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;
        }
如果我需要详细说明类结构,使其更有意义,请告诉我。

使用

使用


为了进一步改进,您可以使用StringBuilder并附加每个计算的字符串文本。这可以节省JVM创建单个字符串文本的负载,从而提高性能。

要进一步提高性能,可以使用StringBuilder并附加每个计算的字符串文本。这可以节省JVM创建单个字符串文本的负载,从而提高性能。

首先,您应该使用StringBuilder来连接字符串

请看这里:


首先,应该使用StringBuilder连接字符串

请看这里:

除非在代码更简单或性能更好方面具有优势,否则应始终使用字符串

如果需要连接大量字符串,则附加到StringBuilder对象更有效。

除非字符串在代码更简单或性能更好方面具有优势,否则应始终使用字符串

如果需要连接大量字符串,则将其附加到StringBuilder对象更有效。

使用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(", ");
}
}
使用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(", ");
}
}
我假设actualElement是在类的其他地方定义的,尽管更好的名称可能会更好。if output.equals是不必要的。只需使用[]启动输出StringBuilder,并将其追加即可

然而,你的列表实际上是循环的。如果这个列表没有循环,你将得到一个NPE。如果这个列表看起来更像一个6,如[a,B,C,D,E,C,D,E…],则循环将永远不会结束。

我假设actualElement在类中的其他位置定义,尽管更好的名称可能会更好。if output.equals是不必要的。只需使用[]启动输出StringBuilder,并将其追加即可


然而,你的列表实际上是循环的。如果这个列表没有循环,你将得到一个NPE。如果这个列表看起来更像一个6,如[a,B,C,D,E,C,D,E…],那么循环将永远不会结束。

你应该使用StringBuilder进行有效的连接。你说它是自动标记的。你知道确切的分级标准吗?循环中带+的字符串连接是次优的,这可能就是为什么你在自动分级上被拒绝的原因。像其他人建议的那样使用StringBuilder。@CedricReichenbach我不知道是什么评分标准是……我已经尝试了几种不同的方法来构建字符串,但这是我目前为止最好的方法。好的,谢谢大家的提示,似乎每个人都在把我指向StringBuilder,所以我会研究一下,看看我得到了什么样的结果。你应该使用StringBuilder进行有效的连接。你说它是自动生成的。你知道exac吗t分级标准?循环中带+的字符串串联是次优的,这可能是您在自动分级中被拒绝的原因。请按照其他人的建议使用StringBuilder。@CedricReichenbach我不知道分级标准是什么……我尝试了几种不同的方法来建立字符串,但这是我迄今为止最好的方法。好的,谢谢你的提示就像每个人都在把我指向StringBuilder一样,我将对此进行调查,看看我得到了什么结果。
 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(", ");
}
}