StringBuilder 류 의 capacity()방법 과 length()방법 에 대한 작은 구덩이
4116 단어 StringBuilder 클래스capacitylength
문 제 는 다음 과 같다.
stringBuilder.delete(stringBuilder.capacity() - 5, stringBuilder.capacity());
이 코드 는 잘못 보고 하거나 많이 삭제 하거나 적 게 삭제 하거나 때로는 정확 하 다.원 하 는 문자열 을 얻 지 못 할 때 도 있다.간단 한 테스트 capacity()방법 과 length()방법의 차 이 는 다음 과 같다.
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("abcdefgh2321");
System.out.println("length:" + stringBuilder.length());
System.out.println("capacity:" + stringBuilder.capacity());
System.out.println("length :" + stringBuilder.delete(stringBuilder.length() - 3,stringBuilder.length()));
System.out.println("capacity :" + stringBuilder.delete(stringBuilder.capacity() - 7,stringBuilder.capacity()));
System.out.println("capacity :" + stringBuilder.delete(stringBuilder.capacity() - 5,stringBuilder.capacity()));
코드 는 다음 과 같 습 니 다:출력:
마지막 으로 원본 코드 보기,
StringBuilder 클래스 는 AbstractStringBuilder 추상 클래스 에 계 승 됩 니 다.
AbstractString Builder 추상 클래스 에 넣 은 문자열 은 char[]value 배열 에 저장 되 며,count 는 저 장 된 문자 수 입 니 다.
capacity()방법 으로 얻 은 value 배열 의 길이,length()방법 으로 얻 은 것 은 count,즉 문자열 의 실제 길이 입 니 다.
StringBuilder 를 초기 화 할 때,즉 new StringBuilder()일 때 char[16]크기 의 char 데 이 터 를 초기 화하 여 문자열 을 저장 합 니 다.문자열 이 증가 하면 확장 합 니 다.
물론 new StringBuilder("213123");문자열 의 길이 가 16 을 초기 배열 char[]value 의 크기 로 증가 합 니 다.
마지막:
capacity()방법 과 length()방법 을 사용 할 때 선택 하 시기 바 랍 니 다.그렇지 않 으 면 예상 치 못 한 구덩이 가 생 길 수 있 습 니 다.
StringBuilder 초기 화 된 크기 가 성능 에 미 치 는 영향
StringBuilder 는 자신의 데이터 길 이 를 동적 으로 늘 릴 수 있 는 클래스 로 기본 길이(capacity 속성)는 16 입 니 다.
그것 은 용기 의 길 이 를 지정 할 수 있 는 구조 함수 가 있다.데이터 양 이 시간 이 지나 면 지 정 된 길이 의 의미 가 크 지 않 지만 데이터 양 이 비교적 많 을 때 지 정 된 길 이 는 성능 에 현저 한 영향 을 미친다.
본 고 는 작은 예 시 를 통 해 성능 에 미 친 영향 을 검증 하고 자 한다.
코드 는 다음 과 같 습 니 다:
public class StringBuilderTest {
public static void main(String[] args) throws Exception {
// StringBuilder
int times = args.length > 0 ? Integer.parseInt(args[0]) : 100;
int length = args.length > 1 ? Integer.parseInt(args[1]) : 0;
// times test(length)
long t1 = System.currentTimeMillis();
for (int i = 0; i < times; i++)
test(length);
long t2 = System.currentTimeMillis();
//
System.out.printf("Time taken: %d ms.
", (t2 - t1) / times);
}
// StringBuilder 。
static int test(int length) {
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < 10000000; i++)
sb.append(i + "");
return sb.length();
}
}
다음은 인 코딩 후 2GB 메모 리 를 할당 해 콘 솔 에서 100 회 실행 하 는 실행 결 과 를 테스트 하 는 것 이다.$ java -Xmx2g -Xms2g StringBuilderTest 100 0
Time taken: 273 ms.
$ java -Xmx2g -Xms2g StringBuilderTest 100 73000000
Time taken: 205 ms.
성능 차 이 는 약 30%이다.
결론.
StringBuilder 를 사용 하여 빅 데 이 터 를 처리 할 때,만약 우리 가 아주 작은 성능 손실 로 데 이 터 를 얻 을 수 있 는 큰 시간 을 예측 할 수 있다 면,StringBuilder 의 길 이 를 미리 지정 하면 처리 속 도 를 현저히 높 일 수 있다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 에서 StringBuffer 의 length()와 capacity()방법 비교1.StringBuffer()의 초기 용량 은 16 개의 문 자 를 수용 할 수 있 으 며,이 대상 의 실체 가 저장 하 는 문자 의 길이 가 16 보다 크 면 실체 용량 은 자동 으로 증가한다.StringBuffe...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.