[英]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.