Slow string concatenation over large input

前端 未结 6 808
醉酒成梦
醉酒成梦 2021-01-12 13:47

I\'ve written an n-ary tree ADT which works fine. However, I need to store its serialization in a variable a calling class. eg.

    DomTree a         


        
6条回答
  •  耶瑟儿~
    2021-01-12 14:06

    String concats like that are punishingly slow. Use a StringBuilder.

    @Override
    public String toString(){
            StringBuilder buffer = new StringBuilder();
            printTree(this, buffer);
            return buffer.toString();
    }
    
    public void printTree(AbstractTree tree, StringBuilder buffer){
        if (tree.isLeaf()){
            buffer.append(tree.getNodeName());
        } else {
            buffer.append(tree.getNodeName());
            buffer.append("(");
    
            int i = 0;
            Iterator> child = tree.getChildren().iterator();
            while (i < tree.getChildren().size() - 1){
                printTree(child.next(), buffer);
                buffer.append(", ");
                i++;
            }
            printTree(child.next(), buffer); 
            buffer.append(")");
        }
    }
    

提交回复
热议问题