2017-09-06 2 views
2

capacity() 메서드가 length() 메서드와 다른 이유를 알아 내려고 시도했습니다. StringBuilder 또는 StringBuffer 클래스입니다.StringBuilder의 length() 및 capacity() 메서드 간의 차이점

스택 오버플로를 검색하여 this 대답을 찾았지만 length() 메서드와 구별되는 점을 이해하지 못했습니다. 나는 또한 this 웹 사이트를 방문했다. 그러나 이것은 나를 더 적게 도왔다.

+0

'length()'는 현재 얼마나 많은 내용이 들어 있는지를 나타냅니다. 'cacacity()'는 현재 공간을 차지하는 정도입니다. – khelwood

답변

5

StringBuilder은 텍스트를 작성하는 데 사용됩니다. 내부적으로는 문자 배열을 사용하여 추가 한 텍스트를 보유합니다. capacity은 배열의 크기입니다. length은 현재 배열에서 사용되어야하는 텍스트로 채워지는 양입니다. 그래서 함께 :

StringBuilder sb = new StringBuilder(1000); 
sb.append("testing"); 

capacity()은 1000 (이 내부 배열이 더 큰 것으로 교체 할 필요가 전에 1000 자위한 공간입니다), 그리고 length()는 (배열의 일곱 개 의미있는 문자가) 7.

StringBuilder에 용량을 초과하는 텍스트를 추가하려고하면 더 큰 새 버퍼를 할당하고 메모리 사용 및 성능에 영향을주는 내용을 복사해야하므로 용량이 중요합니다.

StringBuilder sb = new StringBuilder(); 
sb.append("Singing:"); 
sb.append("I am the very model of a modern Major General"); 

이 ... 그 배열로 char[16]StringBuilder, 복사 "Singing:"를 만들고 : 예를 들어, StringBuilder의 기본 용량은 현재 16 개 이렇게 문자 (이 문서화되지 않고 변경 될 수 있습니다)입니다 배열을 만들고 두 번째 문자열을 추가 할 수 있기 전에 내용을 복사해야합니다. 두 번째 문자열을 추가 할 공간이 충분하지 않기 때문에 두 번째 문자열을 추가 할 수 있습니다.


*

3

문자열의 길이는 항상보다 작거나 빌더의 용량과 동일 (중 여부를 코드가 무엇을하고 있는지에 따라 달라집니다 중요). 길이는 이고 실제 크기는이며 빌더에 저장된 문자열의 수는 현재 인 이며 현재 들어갈 수 있습니다.

용량을 초과하여 더 많은 문자가 추가되면 빌더의 용량이 자동으로 증가합니다. 내부적으로 문자열 빌더는 문자 배열이므로 빌더의 용량은 배열의 크기입니다. 빌더의 용량이 초과되면 어레이가 새 어레이로 교체됩니다. 새 배열 크기는 2 * (the previous array size + 1)입니다.

자바에 새로운이기 때문에, 나는 당신의 StringBuilder의 효율성에 대한이 팁 제안 :

당신은 지정된 초기 용량의 StringBuilder를 만들 newStringBuilder(initialCapacity)을 사용할 수 있습니다. 신중하게 초기 용량을 선택하면 프로그램을보다 효율적으로 만들 수 있습니다. 용량이 항상 빌더의 실제 길이보다 큰 경우 JVM은 빌더의 메모리를 다시 할당 할 필요가 없습니다. 반면에 용량이 너무 크면 메모리 공간을 낭비하게됩니다. trimToSize() 메서드를 사용하여 용량을 실제 크기로 줄일 수 있습니다.

내가 할 수있는 최선의 조건을 설명하려고 했으므로 도움이되기를 바랍니다.

+0

고마워요 @ mandy8055 – NiruADV

+0

경의를 표하신 선생님 (@ 토플 리프) 내 대답에 편집 한 내용에 대해 물어보고 싶습니다. (편집이 좋았습니다.) ** 현재 크기가 ** 최대 **로 변경되었습니다. 크기**? 그것은 증가 할 수 있습니다 ** 현재 ** 좋은 옵션이 아닌가요? – Mandy8055

+0

나는 그것이 유용한 설명이라고 생각했다. 그러나 만일 당신이 동의하지 않고 이미 그것을 바꿨다면 그것은 나에게 완전히 멋지다. 나에게 "실제 크기"와 "현재 크기"는이 문맥에서 사실상 동의어처럼 보입니다. 어쩌면 "현재 적합 할 수있는 최대 크기"가 합리적인 타협이 될 수 있을까요? 다소 gratuitous boldfacing도 나를 던져 버릴지도 모른다. – tripleee

관련 문제