티스토리 뷰

문자열 리스트가 주어졌을 때 이 문자열들을 하나로 이어 붙이는데 걸리는 시간은?


String joinWords(String[] words) {

String sentence = "";

for (String w : words) {

sentense += w;

}

return sentence;

}

문자열을 이어붙일 때마다 두 개의 문자열을 읽어 들인 뒤 문자를 하나하나 새로운 문자열에 복사해야 한다.

처음에는 1개, 두 번째는 2개, 세 번째는 3개, n번째는 n개를 복사해야 한다.

따라서 총 수행 시간은 아래와 같이 된다.

StringBuilder가 이 문제를 해결해 줄 수 있다. StringBuilder는 가변 크기 배열을 이용하여 필요한 경우에만 문자열을 복사하게 해준다.


String joinWords(String[] word) {

StringBuilder sentence = new StringBuilder();

for (String w : words) {

sentence.append(w);

}

return sentence.toString();

}

이와 같이 구현할 경우 총 수행 시간은 이 된다



StringBuilder의 메모리 확장


StringBuilder는 크기를 미리 설정하지 않은 경우에 내부적으로 설정한 크기를 넘어서는 경우 전체 크기를 두 배로 늘리므로, 최종 크기가 실제 크기보다 더 클 수도 있다. 따라서 StringBuilder를 생성 할 때 크기를 미리 설정할 수 있다면 하는것이 좋다.

StringBuilder와 StringBuffer의 차이


StringBuilder는 동기화를 보장하지 않는다.(async)

StringBuffer는 StringBuilder보다 속도가 느리지만, 동기화를 보장해(sync) 주어 멀티쓰레드(Multi Thread) 환경에서 안전하다.



참고문헌

- 코딩인터뷰 완전분석(게일 라크만 백도웰)

[자료구조 알고리즘] 자바의 StringBuilder에 대해 알아보고 구현하기


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함