При построении строки Java char за символом через цикл через «сложение» можно заметить, что сложность времени выполнения этой операции невелика: она квадратична O(n^2)
время. Тем не менее, мне интересно, является ли пространственная сложность «добавление» String char-by-char через цикл также плохой.
Вот минимальный пример программы, которая выполняет построение строки путем посимвольного сложения с секундомером. Результаты, показанные ниже, ясно показывают квадратичную кривую:
/**Create a String of n 'A's char-by-char.
* @param n Number of 'A's to be appended
* @return The finished string
*/
public static String appendString(int n) {
String str = "";
// Timed run starts here
long t = System.currentTimeMillis();
// String concatenation occurs here
for (int k = 0; k < n; k++)
str += "A";
t = System.currentTimeMillis() - t;
// Timed run ends
System.out.printf("%d\t%d\n", n, t);
return str;
}
Хотя я могу получить временную сложность программы, мне интересно, какова пространственная сложность построения строки char-by-char?
Предпочтителен подробный ответ, касающийся управления памятью. (Я подозреваю, что это также квадратично, потому что строки неизменяемы, и каждый раз вам приходится выделять новую память для постоянно увеличивающихся строк)
Примечание. Это не дубликат сложности конкатенации строк. в C++ и Java, потому что он не учитывает пространственную сложность. Я специально прошу подробный анализ пространственной сложности.
StringBuilder
. Он был разработан с учетом такого сценария. - person Dawood ibn Kareem   schedule 02.07.2018