자바 에서 StringBuffer 의 length()와 capacity()방법 비교

StringBuffer 의 length()와 capacity()
StringBuffer 클래스 와 String 클래스 의 차 이 는 많 지 않 습 니 다.모두 문자열 클래스 입 니 다.다만 StringBuffer 는 문자열 을 수정 할 때 새로운 대상 을 만 들 지 않 기 때문에 효율 이 상대 적 으로 높 고 사용 공간 도 적 습 니 다.
length()방법 과 capacity()방법 은 모두 StringBuffer 의 길 이 를 가 져 옵 니 다.
length()문자열 의 실제 길 이 를 되 돌려 줍 니 다.
capacity()는 문자열 이 차지 하 는 용기 의 총 크기 를 되 돌려 줍 니 다.
예:
这里写图片描述
볼 수 있 습 니 다:
1.StringBuffer 의 초기 크기 는(16+초기 문자열 길이)즉 capacity=16+초기 문자열 길이 입 니 다.
2.length 가 capacity 보다 크 면 capacity 는 지난번 에 1 을 더 한 후에 배로 증가한다.
예 를 들 면:

length=1;capacity=17;//    
length=5;capacity=17;//
length=17;capacity=17;//
length=18;capacity=(capacity+1)*2=36;//     
............
length=37;capacity=(capacity+1)*2=74;//     
............
그러나 다음 과 같은 특수 한 상황 이 있다.

    StringBuffer sb3=new StringBuffer("a");
        System.out.println("length="+sb3.length());//length=1
        System.out.println("capacity="+sb3.capacity());//capacity=17;
        System.out.println("--------------------");
        sb3.append("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
        System.out.println("length="+sb3.length());//length=20;
        System.out.println("capacity="+sb3.capacity());//capacity=40;
length>capacity 시 capacity 의 배가 가 length 의 길이 에 이 르 지 못 합 니 다.이러한 현상 을 크로스 라 고 합 니 다.이때 capacity 는 length 의 실제 크기 에 따라 길 이 를 설정 하고 그 후에 직접 배가 되 는 방식 으로 증가 합 니 다(length+1 을 사용 하지 않 습 니 다)
StringBuffer 류 초기 용량 및 확장
StringBuffer 클래스 는 수정 가능 한 문자열 시퀀스 를 만 들 수 있 습 니 다.
이 종 류 는 StringBuffer(),StringBuffer(int size),StringBuffer(String s)세 가지 개조 방법 이 있다.
1.StringBuffer()의 초기 용량 은 16 개의 문 자 를 수용 할 수 있 으 며,이 대상 의 실체 가 저장 하 는 문자 의 길이 가 16 보다 크 면 실체 용량 은 자동 으로 증가한다.StringBuffer 대상 은 length()방법 으로 실체 에 저 장 된 문자 배열 의 길 이 를 얻 을 수 있 으 며,capacity()방법 으로 현재 실체의 실제 용량 을 얻 을 수 있 습 니 다.
2.StringBuffer(int size)는 이 대상 에 게 분 배 된 실체의 초기 용량 인 자 를 매개 변수 size 가 지정 한 문자 개수 로 지정 할 수 있 습 니 다.이 대상 의 실체 가 저장 하 는 문자 배열 의 길이 가 size 문자 보다 클 때 실체의 용량 은 자동 으로 증가한다.추 가 된 문 자 를 저장 할 수 있 습 니 다.
3.StringBuffer(String s)는 대상 에 게 지정 할 수 있 는 실체의 초기 용량 을 매개 변수 문자열 s 의 길이 에 16 개의 문 자 를 추가 할 수 있 습 니 다.이 대상 의 실체 가 저장 하 는 문자 배열 의 길이 가 size 문자 보다 클 때 실체의 용량 은 증가 하 는 문 자 를 저장 할 수 있 도록 자동 으로 증가 합 니 다.
다음은 StringBuffer()를 어떻게 확장 하 는 지 소개 합 니 다.
먼저 우 리 는 StringBuffer 와 StringBuilder 류 가 추상 류 AbstractStringBuilder 류 를 계승 했다 는 것 을 알 아야 한다.
원본 코드 는 부모 클래스 를 호출 하여 초기 화 합 니 다:

StringBuffer(String s)의 초기 화:

용량 확장 알고리즘:
append()방법 을 사용 하여 문자열 뒤에 물건 을 추가 할 때 이 문자열 의 저장 공간 크기 를 초과 하면 확장 이 필요 합 니 다.새로운 저장 공간 이 더 큰 문자열 을 구축 하여 오래 복사 합 니 다.
문자열 append 를 추가 할 때 추 가 된 문자열 의 크기 를 계산 하여 하나의 방법 으로 전 송 됩 니 다.ensureCapacity Internal 이라는 방법 으로 확장 여 부 를 판단 하고 확장 이 필요 하면 expandCapacity 방법 으로 확장 합 니 다.

새 용량 을 크기 로 2 배+2 if 로 확대 해 용량 이 부족 하면 필요 한 용량 크기 로 직접 확장 해 보 세 요.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기