Я пишу модуль, который будет генерировать 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 раз больше, чем в настоящее время, какая из них, если таковая имеется, будет быстрее?
Если вы действительно обеспокоены производительностью здесь, используйте StringBuffer –
Кроме того, я не удивлюсь, если компилятор Java просто оптимизирует оба ваших фрагмента (примерно) одного и того же байтового кода Java –
, и вы можете избежать последнего запись внутри цикла, перемещая код, выполняемый для последней записи вне цикла, и уменьшая количество итераций цикла на 1 –