Ответ 1
Смотрите: JavaSE 6 java.lang.StringBuffer capacity()
Но ваше предположение верно:
Емкость - это объем хранилища, доступный для вновь вставленных символов, за пределами которого будет выполняться распределение
Когда я запускаю этот код:
StringBuffer name = new StringBuffer("stackoverflow.com");
System.out.println("Length: " + name.length() + ", capacity: " + name.capacity());
он выводит результат:
Длина: 17, вместимость: 33
Очевидная длина связана с количеством символов в строке, но я не уверен, какая емкость? Это количество символов, которое StringBuffer может удерживать перед перераспределением пространства?
Смотрите: JavaSE 6 java.lang.StringBuffer capacity()
Но ваше предположение верно:
Емкость - это объем хранилища, доступный для вновь вставленных символов, за пределами которого будет выполняться распределение
Да, вы правы, см. JavaDoc для получения дополнительной информации:
Пока длина символьной последовательности, содержащейся в буфере строк, не превышает емкость, нет необходимости выделять новый внутренний буферный массив. Если внутренний буфер переполняется, он автоматически становится больше.
Внутри StringBuffer
используется массив char
для хранения символов. Емкость - это начальный размер этого массива char
.
Более INFO можно найти в http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html
Из http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html#capacity%28%29
public int capacity()
Возвращает текущую емкость. Емкость - это объем хранилища, доступный для вновь вставленных символов, за пределами которого произойдет распределение.
Также из того же документа
С момента выпуска JDK 5 этот класс был дополнен эквивалентным классом, предназначенным для использования одним потоком StringBuilder. Класс StringBuilder обычно следует использовать в предпочтении этому, поскольку он поддерживает все те же операции, но быстрее, поскольку он не выполняет синхронизацию.
Да, именно это. Вы можете думать о StringBuffer
как немного как Vector<char>
в этом отношении (за исключением, очевидно, вы не можете использовать char
как аргумент типа в Java...)
Взято из официальной документации J2SE
Емкость - это объем хранилища, доступный для вновь вставленных символов, за пределами которого будет выделено выделение.
Обычно его длина + 16, что является минимальным распределением, но как только количество символов, то есть его размер превышает выделенную, StringBuffer также увеличивает свой размер (по фиксированной сумме), но на сколько будет назначено количество, мы не может вычислить его.
Каждый буфер строк имеет емкость. Пока длина последовательность символов, содержащаяся в буфере строк, не превышает емкости, нет необходимости выделять новый внутренний буферный массив. Если внутренний буфер переполняется, он автоматически становится больше.
От: http://download.oracle.com/javase/1.4.2/docs/api/java/lang/StringBuffer.html
StringBuffer имеет char [], в котором он хранит строки, которые вы добавляете к нему. Объем памяти, выделенной в этот буфер, является емкостью. Используемая сумма - это длина.
Это размер внутреннего буфера. Как Javadoc говорит:
Каждый буфер строк имеет емкость. Пока длина последовательность символов, содержащаяся в буфере строк, не превышает емкости, нет необходимости выделять новый внутренний буферный массив. Если внутренний буфер переполняется, он автоматически становится больше.
"Каждый буфер последовательности имеет емкость. Если длина последовательности символов, содержащейся в буфере строк, не превышает емкость, нет необходимости выделять новый внутренний буферный массив. Если внутренний буфер переполняется, автоматически делается больше."
http://download.oracle.com/javase/1.3/docs/api/java/lang/StringBuffer.html -see capacity() и обеспечивать емкость()
Емкость - это количество хранилища, доступное для вновь вставленных символов. Оно отличается от length(). Длина() возвращает общее количество символов и значение емкости 16 по умолчанию, если количество символов меньше 16.But если количество символов больше 16, то это количество символов + 16. В этом случае нет символов = 17 Так, емкость = 17 + 16 = 33
Иван, просто прочитайте документацию для capacity() - он напрямую отвечает на ваш вопрос...
Начальная емкость класса StringBuffer/StringBuilder равна 16. В первый раз, если длина вашей строки станет > 16. Емкость класса StringBuffer/StringBuilder возрастает до 34 i.e [(16 * 2) +2]
Но когда длина вашей String становится > 34, емкость класса StringBuffer/StringBuilder становится точно равной текущей длине строки.