StringBuilder
클래스안에 배열공간을 만들어 놓고 append 함수가 호출되면 추가되는 문자열을 해당 배열공간에 바로 추가한다
배열공간이 부족하면 그때마다 공간을 늘려서 복사한다
속도나 공간면에서 효율적이다
StringBuffer
StringBuilder와 기능은 같으나, 동기화를 보장한다
속도는 느리지만 동기화가 보장되어 멀티쓰레드 환경에서 사용된다
StringBuilder 코드 구현
class StringBuilder { private char[] value; //문자열 저장 private int size; //배열방 크기 저장 private int index; //새로 추가될 문자의 방 번호를 기억하는 함수 StringBuilder() { size = 1; value = new char[size]; //초기화한 크기만큼 배열방 생성 index = 0; } public void append(String str) { //문자열을 추가하는 함수 append if(str == null) str = “null”; ine len = str.length(); ensureCapacity(len); for(int I = 0; I < str.length(); I++) { value[index] = str.charAt(i); index++; //인덱스를 증가시켜 다음 배열방을 가리킨다 } System.out.println(size + “, ” + index); //추가할 때 사이즈와 인덱스 확인 } private void ensureCapacity(int len) { //배열공간의 크기를 늘려주는 ensureCapacity 함수 정의 if index + len > size) { size = (size + len) * 2; char[] newValue = new char[size]; //새로운 배열방 for(int I = 0; I < value.length; i++) { newValue[i] = value[i]; } value = newValue; System.out.println(“*** ” + size + “, ” + index); } } public String toString() { return new String(value, 0, index); //현재 저장된 배열방에 0번방부터 인덱스까지의 모든 문자를 문자열로 반환 } } public class Test { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); sb.append(“sung”); sb.append(“ is”); sb.append(“ pretty”); System.out.println(sb.toString()); } } |
'CS지식 > 자료구조' 카테고리의 다른 글
TIL 정리_51(Queue) (0) | 2022.04.07 |
---|---|
TIL 정리_50(Stack) (0) | 2022.04.06 |
TIL 정리_48(Hash Table, ArrayList) (0) | 2022.04.04 |
TIL 정리_47(Linked List) (0) | 2022.04.03 |
TIL 정리_46(Linked List) (0) | 2022.04.02 |