繁体   English   中英

这是编写此代码块的更有效方法

[英]Which is a more efficient way to write this block of code

我正在编写一个模块,该模块将基于某些输入文件生成DDL。 我试图找出哪种方法更有效。

这个:

for (int i = 0; i < Common.testFields.size(); i++) {
    line = "";
    line += "  " + Common.testFields.get(i).toString() + "  ";
    line += Common.dataTypes.get(i).toString(); 
    if (i != Common.testFields.size() - 1) 
        line += ",";
    ddl += line;
    if (i != Common.testFields.size() - 1) 
        ddl += "\n";
}

或这个:

for (int i = 0; i < Common.testFields.size(); i++) {
    line = "";
    line += "  " + Common.testFields.get(i).toString() + "  ";
    if (i == Common.testFields.size() - 1) {
        line += Common.dataTypes.get(i).toString(); 
        ddl += line;
    }
    else {
        line += Common.dataTypes.get(i).toString() + ",";
        ddl += line + "\n";
    }
}

我计时执行两个for使用循环System.currentTimeMillis()但是当我打印出经过的时间,它打印出1毫秒两种。 Common.testFields.size()当前为165。考虑到两者都具有相同的O(n)复杂度这一事实,如果Common.testFields.size()相当大,例如比其大1000甚至10000倍。目前,如果有的话,哪一个会更快?

我最喜欢的“加入”模式是这样的:

StringBuilder builder = new StringBuilder();
String separator = "";

for (int i = 0; i < Common.testFields.size(); i++) {
    builder.append(separator)
           .append("  ")
           .append(Common.testFields.get(i))
           .append("  ")
           .append(Common.dataTypes.get(i));

    separator = ",\n";
}

String ddl = builder.append("\n").toString();

无需特殊情况“如果最后”或“如果首先”。

这个怎么样...

//assuming
String ddl = new String("")

for (int i = 0; i < Common.testFields.size(); i++){
    ddl += "  "
         + Common.testFields.get(i).toString()
         + "  "
         + Common.dataTypes.get(i).toString()
         + ",\n";
}

ddl = ddl.substring(0, ddl.length()-3);
ddl += "/n";

如果要确定,则必须进行测量。

// the JIT might be able to do this optimisation, but lets be sure
StringBuilder builder = new StringBuilder();

// resolve this just once (assuming it stays the same during your loop), you never know how the VM is going to do this lookup
// also change type of list to the type of Common.testFields
ArrayList<? extends Object> fields = Common.testFields;
ArrayList<? extends Object> data = Common.dataTypes;
for (int i = 0, size = fields.size(); i < size; i++) {
    builder.append("  ").append(fields.get(i)).append("  ").append(data.get(i));
    if (i != size - 1)
        builder.append(",\n");
}
ddl = builder.toString(); // or += or whatever the previous state of ddl is...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM