Какова емкость StringBuffer?

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

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

он выводит результат:

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

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

Ответ 1

Смотрите: JavaSE 6 java.lang.StringBuffer capacity()

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

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

Ответ 2

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

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

Ответ 4

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

public int capacity()

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

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

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

http://download.oracle.com/javase/1.3/docs/api/java/lang/StringBuffer.html -see capacity() и обеспечивать емкость()

Ответ 11

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

Ответ 12

Иван, просто прочитайте документацию для capacity() - он напрямую отвечает на ваш вопрос...

Ответ 13

Начальная емкость класса StringBuffer/StringBuilder равна 16. В первый раз, если длина вашей строки станет > 16. Емкость класса StringBuffer/StringBuilder возрастает до 34 i.e [(16 * 2) +2]

Но когда длина вашей String становится > 34, емкость класса StringBuffer/StringBuilder становится точно равной текущей длине строки.