JavaRush/Java блог/Random/Класс StringBuilder в Java 8 на практическом примере

Класс StringBuilder в Java 8 на практическом примере

Статья из группы Random
участников
Класс String создает неизменяемые строки. Это означает, что если применить любую операцию к строке или операции к строке, то в результате будет построена новая строка. Если эту новую строку не присвоить никакой переменной, то результат операции будет утерян. Соответственно операции над такими строками обязательно приводят к созданию новой строки. А это дополнительные расходы памяти и времени процессора. Если операций над строкой достаточно много, то часто бывает эффективней воспользоваться динамическими строками, которые реализуются классом StringBuilder.
Класс StringBuilder в Java 8 на практическом примере - 1
Рассмотрим код ниже:
String s = "Some text";
int count = 100;
for(int i = 0; i<100;i++){
   s+=i;
}
**********************
StringBuilder s = new StringBuilder(110);
int count = 100;
s.append("Some text");
for(int i = 0;i<count;i++){
s.append(i);
}
В приведенном коде рассматривается одна и та же задача. Когда мы к заданной строке добавляем 100 новых подстрок. В первом примере для этой цели используется класс String, что не очень эффективно, поскольку каждое добавление подстроки ведет к построению нового объекта String. А это дополнительный расход памяти и времени. Во втором примере эта задача решается с помощью класса StringBuilder. Мы заранее создаем объект класса StringBuilder, а затем с помощью метода append формируем нужную нам строку изменяя содержимое созданного объекта StringBuilder, но без пересоздания самого объекта.
Комментарии (11)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #1019275
Уровень 15
10 марта 2020, 14:08
вы бы показали разницу по времени и памяти для большей наглядности.
Mihail Tymoshenko
Уровень 0
14 октября 2018, 10:38
Обычная на первый взгляд операция создания строки в цикле может обернуться огромными затратами памяти - по-этому в цикле только StringBuilder!
Мария
Уровень 2
13 октября 2018, 21:53
Обязательно опробую StringBuilder у себя в коде! Постоянное создание новых строк, увы, расходует память, так что StringBuilder должен отлично помочь с проблемой ненужных растрат такого важного ресурса
Alesha
Уровень 22
13 октября 2018, 17:06
А что это за 110 "new StringBuilder(110);"?
Нина Можарская
Уровень 17
13 октября 2018, 23:08
параметр конструктора. Конструкторы могут иметь параметры а могут быть без параметров.
Вагиф
Уровень 29
17 октября 2018, 11:17
Верно ли я понимаю, что данные параметр "new StringBuilder(110);" не влияет никак на исход программы?
Евгений Backend Developer
22 октября 2018, 01:47
Если это размер буфера, то не совсем корректно, т.к. мы добавляем 10 строк из 1 символа и 90 из двух, т.е. всего 190 + Some text = 199. Хотя память выделяет JVM по ходу потребности.
Nikita Koliadin Full Stack Developer в Приватбанк
5 октября 2018, 18:38
Если джава < 8 тогда все верно. В 8+ класс String был updated. Read it proof RUSSIA proof proof proof Много пруфов не бывает.
Нина Можарская
Уровень 17
7 октября 2018, 22:56
Моя статья о Java8!!!
Nikita Koliadin Full Stack Developer в Приватбанк
8 октября 2018, 15:02
Это нигде не указанно. Соответственно как user актуальной версии java (11) я решил добавить важную информацию.
Нина Можарская
Уровень 17
9 октября 2018, 06:50
Благодарю