728x90
1. String
① String은 변수의 문자를 할당해줄 때 문자 하나하나씩 할당해주는 로직이 뒷단에 내포되어 있다.
(TMI : 여기서 문자형(char)은 value 그 자체를 할당하는데 문자형의 길이만큼 문자열이 할당된다.)
public void strTest(String[] arrStr) {
String str = "";
for(String strFor : arrStr) {
str += strFor;
}
}
② 해당 코드의 시간복잡도는 O(xn^2) 이다. 왜냐하면
문자열 str 변수의 아무것도 할당하지 않을 때 x가 되고 문자열 배열 'arrStr'의 값을 반복해서 문자의 담을 때 이전에 담았던 문자까지 할당해야 하므로 ( 2x, 3x... nx )가 된다.
그래서 비효율적이어서 자바에서는 문자를 더하는 처리를 할 때 StringBuilder를 제공하고 있다.
2. StringBuilder
① StringBuilder는 클래스안에 배열공간을 미리 만들어놓고 append함수로 문자를 추가 할당하는 경우 해당 배열공간의 문자자체값을 추가하기 때문에 그때그때 새로운 문자를 추가하지 않아 String과는 다르다.
그래서 시간복잡도와 공간복잡도가 String보다 효율적이다.(코드는 3번 코드 참고)
3. StringBuilder와 StringBuffer 차이
public static void main(String[] args) {
StringBuilder sbd = new StringBuilder("1+1=");
StringBuffer sbf = new StringBuffer("2+2=");
sbd.append("2");
sbf.append("4");
System.out.println(sbd);
System.out.println(sbf);
}
위 코드와 같이 StringBuilder와 StringBuffer의 사용법은 같다.
하지만 차이가 있는데 그것은 StringBuilder는 동기화를 제공하지 않지만, StringBuffer는 동기화를 제공한다
728x90
'자기계발 > 알고리즘, 자료구조' 카테고리의 다른 글
자료구조 ] Queue(큐) 메소드 add와 offer의 차이 (0) | 2021.12.28 |
---|---|
ArrayList와 HashMap을 이용한 중복키 허용 방법 (2) | 2021.11.11 |
String ] 숫자만 입력해서 특정 문자를 반복하는 방법 (0) | 2021.10.15 |
자료구조 ] 배열을 리스트로 변환하는 방법 (0) | 2021.10.15 |
정규식 ] 전방탐색, 후방탐색 간단 사용예시 정리 (0) | 2021.10.13 |