相关疑难解决方法(0)

大输入上的慢字符串连接

我写了一个n-ary树ADT工作正常.但是,我需要将其序列化存储在变量调用类中.例如.

    DomTree<String> a = Data.createTreeInstance("very_large_file.xml");
    String x = a.toString();
Run Code Online (Sandbox Code Playgroud)

我写的方法,该方法提供正是我需要它的目的,但在非常大的投入需要(在一个100MB的XML文件,20分钟)永远 - 我已经计时的方法,并从XML文件创建树快,但调用toString()如上所示非常慢.

@Override
public String toString(){
    return printTree(this);
}

public String printTree(AbstractTree<E> tree){
    if (tree.isLeaf()){
        return tree.getNodeName();
    }else{
        String tStr = tree.getNodeName() + "(";

        int i = 0;
        Iterator<AbstractTree<E>> child = tree.getChildren().iterator();
        while (i < tree.getChildren().size() - 1){

            tStr += printTree(child.next()) + ", ";
            i++;
        }
        tStr += printTree(child.next()) + ")";

        return tStr;    
    }
}
Run Code Online (Sandbox Code Playgroud)

我猜它是用字符串构建的方式而不是遍历树的方式?有一个更好的方法吗?

更新:遵循Skaffman的示例,以下代码为非常大的输入提供outOfMemoryError.

@Override
public String toString(){
    StringBuilder buffer = new StringBuilder();
    printTree(this, buffer);
    return buffer.toString(); …
Run Code Online (Sandbox Code Playgroud)

java optimization string-concatenation

6
推荐指数
3
解决办法
3394
查看次数

标签 统计

java ×1

optimization ×1

string-concatenation ×1