StringBuilder
StringBuilder е клас, който служи за построяване и промяна на символни низове. Той преодолява проблемите с бързодействието, които възникват при конкатениране на низове от тип String. Класът е изграден под формата на масив от символи и това. Информацията в него не е неизменима – промените, които се налагат в променливите от тип StringBuilder, се извършват в една и съща област от паметта (буфер), което спестява време и ресурси. За промяната на съдържанието не се създава нов обект, а просто се променя текущият.
StringBuilder sb = new StringBuilder(15);
sb.append("Hello, World! ");
sb.append("It’s a great day!");
- capacity() – връща размера на целия буфер (общия брой заети и свободни символи)
- length() – връща дължината на записания низ в променливата
- charAt(int index) – връща символа на указаната позиция
- append(…) – слепва низ, число или друга стойност след последния записан символ в буфера
- delete(int start, int end) – премахва низ по зададена начална и крайна позиция
- insert(int offset, String str) – вмъква даден стринг на дадена позиция
- replace(int start, int end, String str) – замества записания низ между началната и крайната позиция със стойността на променливата str
- toString() – връща записаната информация в обекта на StringBuilder като резултат от тип String, който можем да запишем в променлива на String.
StringBuffer
StringBuffer в Java е клас, представляващ mutable (модифицируем) символен низ. Този клас е част от Java Standard Edition и предоставя възможност за манипулиране на символни низове посредством различни операции като добавяне на символи, вмъкване, изтриване и други.
Сравнение със StringBuilder:
- Mutable vs Immutable:
StringBuffer е част от Java Standard Edition и е mutable (модифицируем). Това означава, че можете да променяте съдържанието му, след като е създаден. StringBuilder също е mutable и представлява по-нова версия на StringBuffer. Въведен е в Java 5 и е предпочитан в съвременни приложения поради някои оптимизации и подобрения.
- Thread safety:
StringBuffer е потокобезопасен, което означава, че е подходящ за използване в многонишкови приложения, тъй като методите му са синхронизирани. StringBuilder не е синхронизиран, затова е по-бърз, но трябва да се използва с предпазливост в многонишкови среди.
- Производителност:
Поради синхронизацията си, StringBuffer може да бъде по-бавен от StringBuilder, особено в немногонишкови приложения, където няма нужда от синхронизация.
- Методи:
И двата класа предоставят подобни методи за манипулиране на символни низове, като append(), insert(), delete(), и други. Синтаксисът и работата на тези методи са сходни между двата класа.
- Използване:
Ако работите в многонишкова среда и имате нужда от потокобезопасност, може да използвате StringBuffer. Ако не е необходима потокобезопасност, StringBuilder обикновено е предпочитан, тъй като е по-бърз.