2013-11-21 5 views
-1

Какова емкость StringBuffer? Нужно ли устанавливать размер емкости при запуске программы? И если она не установлена, значит, программа работает медленно? например. более 1000 символов длины используется StringBuffer outputSource = new StringBuffer(); С другой стороны, установка относительно точного значения должна увеличивать производительность программных вычислений? Надеюсь, мой вопрос ясен. Спасибо заранее!Какова емкость StringBuffer? И какова его цель и ее влияние?

ответ

-1

любой, как stringbuffer изменен. любой, как он не собирается создавать какой-либо дополнительный объект, как только он был выделен для памяти.

поэтому его не влияет на производительность, если вы относительно определения любого размера strignbuffer

4

Вы должны использовать более свежий StringBuilder класс. Это по сути то же самое, но без синхронизации.

Если вы знаете заранее приблизительный размер, более эффективно распределить StringBuilder с достаточной пропускной способностью. Таким образом, во время операций изменять размер не нужно.

Обратите внимание: если вы не используете несколько операций для создания длинных строк, это не повлияет на производительность. Ситуация, при которой определение емкости может быть полезна, например, создает String из 10 000 символов, добавляется 10 символов за раз. Это займет 1000 вызовов приложений, и может потребоваться, чтобы внутренний char[] был изменен несколько раз.

Однако, если вы должны были создать строку из 10 000 символов с двумя добавками, вы можете получить только 2 изменения размера. Это вряд ли будет проблемой.

1

According to the JavaDoc

Каждый строковый буфер имеет емкость. Пока длина последовательности символов , содержащейся в буфере строк, не превышает емкость , нет необходимости выделять новый внутренний буферный массив. Если внутренний буфер переполняется, он автоматически становится больше. Поскольку выпуска JDK 5, этот класс был дополнен классом эквивалентного класса , предназначенным для использования одним потоком StringBuilder. Класс StringBuilder обычно должен использоваться для этого , так как он поддерживает все те же операции, но он быстрее, так как он не выполняет синхронизацию.

Некоторые важные темы

Если вы переполнить емкость буфера необходимо выделить больше памяти, это будет иметь определенное влияние на производительность в зависимости от того, как StringBuffer используется.

В основном емкость StringBuffer равна столько же памяти, сколько вы назначили своей программе.

Если не многопоточность использование StringBuilder

0

StringBuffer является поточно. поэтому он работает медленнее, когда он имеет большую сумму, если данные. вместо вашего приложения используется один поток StringBuilder.это быстрый доступ по сравнению с StringBuffer. но StringBuilder есть не поточный сейф.

0

Поскольку строки являются неизменными (не могут быть изменены), объединение может быть довольно продолжительным и запоминающимся, так как при каждой конкатенации старая версия плюс строка, которая должна быть добавлена, создается как новая переменная, имеющая старую переменную все еще на куче ...

StringBuilder хранит внутренний буфер, так что нужно скопировать только строку, которую вы хотите добавить.

Если у StringBuilder заканчивается пространство, он удваивает буфер (в этом случае вся строка должна быть скопирована). причина, по которой буфер удваивается и не просто расширяется до размера, который соответствует размеру старой строки + добавленный, так это то, что в этом случае строка всегда должна быть скопирована снова. следовательно, он удваивается.

Также можно обеспечить окончательный размер буфера в конструктору StringBuilder, который имеет смысл только если вы уже знаете, сколько войдете в Ваш StringBuilder

Надеется, что это помогает

0

Вы должны предпочесть использовать StringBuffer класс.

Класс StringBuffer является изменяемым классом, в отличие от класса String, который является неизменным. И пропускная способность, и строка символов класса StringBuffer. StringBuffer можно изменять динамически. Буферы строк предпочтительнее, когда задействована тяжелая модификация символьных строк (добавление, вставка, удаление, изменение и т. Д.).

Есть такие функции, как capacity() и ensureCapacity() в классе StringBuffere.

capacity() : Returns the current capacity of the String buffer.

ensureCapacity() : this method ensures minimum capacity of the String buffer.

Вы можете пройти по ссылкам, чтобы узнать вкратце о StringBuffer:

http://www.studytonight.com/java/stringbuffer-class.php

http://www.javabeginner.com/learn-java/java-stringbuffer

Смежные вопросы