кодесурса

Класс StringBuffer / StringBuilder

script1adsense2code
script1adsense3code

Вступление

В Java String - неизменяемые объекты, означает, что после создания он не может быть изменен, ссылка будет указывать на новый объект. Если в нашем приложении есть операции с строками, то в куче памяти будет много удаленных строковых объектов, что может привести к снижению производительности. Чтобы обойти эти ограничения, вы можете использовать класс StringBuilder или StringBuffer. Вы используете один из этих классов, которые являются альтернативами классу String, когда вы знаете, что String будет изменен; обычно вы можете использовать объект StringBuilder или StringBuffer везде, где вы используете String. StringBuffer может иметь символы и подстроки, вставленные в середине или добавленные в конец. StringBuffer будет автоматически увеличиваться, чтобы освободить место для таких дополнений, и часто содержит больше предварительно выделенных символов, чем фактически необходимо, чтобы обеспечить пространство для роста. Подобно классу String, эти два класса являются частью пакета java.lang и автоматически импортируются в каждую программу. Классы идентичны, за исключением следующего:

  • StringBuilder более эффективен.
  • StringBuffer является потокобезопасным из-за всех синхронизированных методов.

Давайте посмотрим на программу, которая сравнивает производительность буферных объектов String и String. В этой программе мы интерактивно создаем новый строковый объект внутри цикла for. В следующей программе мы заменим объект String на StringBuffer. Время нанесения рассчитывается и отображается в миллисекундах.

Java-код: перейти к редактору

import java.util.Date;
import java.sql.Timestamp;
public class StringPerformanceCompare {
	public static void main(String[] args) {
		Date sDate = new Date();
		long sTime = sDate.getTime();
		System.out.println("Start Time for StringBuffer: " + new Timestamp(sTime));
		StringBuffer s = new StringBuffer("AA");		
		for (int i=0; i< 10000; i++){		
				s.append(i);
		}
		Date eDate = new Date();
		long eTime = eDate.getTime();
		System.out.println("End Time for StringBuffer: " + new Timestamp(eTime));
		System.out.println("Time taken to Execute StringBuffer process " + (eTime-sTime) + "ms");
		System.out.println("=====================================================================");
		Date strDate = new Date();
		long strTime = strDate.getTime();
		System.out.println("Start Time for String: " + new Timestamp(strTime));
		String str = new String("AA");		
		for (int i=0; i< 10000; i++){		
				str+=i;
		}
		Date eStrDate = new Date();
		long eStrTime = eStrDate.getTime();
		System.out.println("End Time for String: " + new Timestamp(eStrTime));
		System.out.println("Time taken to Execute String process " + (eStrTime-strTime) + "ms");
	}
}

Выход:


Как видно на экране вывода, объекты String немного медленнее в производительности из-за создания новых объектов.

Важные методы классов StringBuffer и StringBuilder

У классов StringBuffer и StringBuilder есть одно отличие: StringBuffer синхронизирует все методы, в то время как StringBuilder не является потокобезопасным, что повышает производительность. Здесь мы обсудим методы StringBuilder, которые также применимы к StringBuffer.

Удаление StringBuilder (int startIndex, int endIndex)

Этот метод удаляет часть последовательности символов StringBuilder. Нам нужно предоставить два аргумента int startIndex и endIndex. Например

 StringBuilder sb = new StringBuilder ("JavaWorld");
sb.delete (4, 8); // значение sb будет Javad 

Вставка StringBuilder (int offset, String s)

Этот метод используется, когда мы хотим вставить определенную последовательность символов, строки или любые типы примитивов в определенный индекс внутри последовательности символов StringBuilder. Например

 StringBuilder sb = new StringBuilder ("ABC");
sb.insert (1, "xyz"); // Здесь значение sb равно ABxyzC

StringBuilder replace (int start, int end, String s)

Этот метод заменит определенную часть последовательности символов на третий аргумент (String), упомянутый в вызове метода. Пример синтаксиса:

 StringBuilder sb = new StringBuilder ("ABCDEF");
sb.replace (1, 3, "XYZ");
System.out.println (SB); // здесь значение sb равно AXYZDEF

StringBuilder reverse ()

Как следует из названия, этот метод обратит последовательность символов в целевом объекте StringBuilder. Пример синтаксиса

 StringBuilder sb = new StringBuilder ("ABCDEF");
sb.reverse (); // здесь значение sb равно FEDCBA

void setCharAt (int index, char ch)

Этот метод следует использовать, когда мы хотим заменить один символ в определенном индексе вторым аргументом метода. Пример синтаксиса,

 StringBuilder sb = new StringBuilder ("ABCDEF");
sb.setCharAt (3, 'x'); // Эта точка sb имеет значение ABCxEF

Ниже программа Java показывает, как использовать эти важные методы в программе Java вместе с выводом.

Java-код: перейти к редактору

public class StringBuilderDemo {
	public static void main(String[] args) {
		StringBuilder sb1 = new StringBuilder("Hello Java World");
		sb1.delete(4, 8);
		System.out.println("Delete method demo: " + sb1);
		StringBuilder sb2 = new StringBuilder("Hello Java World");
		sb2.insert(4, "abc");
		System.out.println("Inser Operation: "+sb2);
		StringBuilder sb3 = new StringBuilder("W3resource.com");
		sb3.replace(1, 4, "Amit");
		System.out.println("Replace Operation: "+sb3);
		StringBuilder sb4 = new StringBuilder("ABCDE");
		System.out.println("Reverse of ABCDE: "+ sb4.reverse());
		StringBuilder sb5 = new StringBuilder("ABCDEF");
		sb5.setCharAt(3, 'x');
		System.out.println("Replacing char at index 3: "+ sb5);
	}
}

Выход:


Резюме

  • Строковые объекты являются неизменяемыми, что замедляет работу приложения
  • Java предоставляет классы StringBuffer и StringBuilder для улучшенной операции со строками.
  • StringBuffer и StringBuilder являются схожими классами, за исключением того, что StringBuffer синхронизирует все методы, в то время как StringBuilder имеет несинхронизированные методы.

Редактор кода Java:

Предыдущая: Важные методы класса String с примером
Далее: Ввод и вывод файла

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code