Какова емкость StringBuffer? - PullRequest
11 голосов
/ 04 ноября 2011

Когда я запускаю этот код:

StringBuffer name = new StringBuffer("stackoverflow.com");
System.out.println("Length: " + name.length() + ", capacity: " + name.capacity());

это дает вывод:

Длина: 17, емкость: 33

Очевидная длина связана с количеством символов в строке, но я не уверен, что емкость? Это количество символов, которое StringBuffer может хранить перед перераспределением пространства?

Ответы [ 13 ]

9 голосов
/ 04 ноября 2011

См .: JavaSE 6 java.lang.StringBuffer емкость ()

Но ваше предположение верно:

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

3 голосов
/ 04 ноября 2011

Да, вы правы, см. JavaDoc для получения дополнительной информации:

Пока длина последовательности символов, содержащейся в строковом буфере, не превышаетемкости, нет необходимости выделять новый внутренний буферный массив.Если внутренний буфер переполняется, он автоматически увеличивается.

2 голосов
/ 04 ноября 2011

StringBuffer имеет символ [], в котором он хранит строки, которые вы к нему добавляете.Объем памяти, выделенный в данный момент этому буферу, является емкостью.В настоящее время используется сумма.

2 голосов
/ 04 ноября 2011

Это размер внутреннего буфера.Как Javadoc говорит:

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

2 голосов
/ 04 ноября 2011

Каждый строковый буфер имеет емкость. Пока длина последовательность символов, содержащаяся в строковом буфере, не превышает емкости, нет необходимости выделять новый внутренний буферный массив. Если внутренний буфер переполняется, он автоматически увеличивается.

От: http://download.oracle.com/javase/1.4.2/docs/api/java/lang/StringBuffer.html

2 голосов
/ 04 ноября 2011

Взято из официальной документации J2SE

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

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

2 голосов
/ 04 ноября 2011

Да, это именно так. В этом отношении вы можете думать о StringBuffer как о Vector<char> (за исключением того, что вы не можете использовать char как аргумент типа в Java ...)

2 голосов
/ 04 ноября 2011

С http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html#capacity%28%29

публичная внутренняя емкость ()

Возвращает текущую емкость. Емкость - это объем памяти, доступный для вновь вставленных символов, после которого произойдет выделение.

Также из того же документа

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

2 голосов
/ 04 ноября 2011

Внутренне StringBuffer использует массив char для хранения символов. Емкость - это начальный размер этого массива char.

Больше информации можно найти по http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html

1 голос
/ 26 июня 2016

Емкость - это объем памяти, доступный для вновь вставленных символов. Он отличается от length (). Length () возвращает общее количество символов, а емкость возвращает значение 16 по умолчанию, если количество символов меньше 16. Но если количество символов превышает 16, количество символов равно + 16. В этом случае нет символов = 17 Так, емкость = 17 + 16 = 33

...