문자열은 문자들을 집합의 형태로 구성한 이뮤터블 객체
Immutable 이뮤터블 객체
값을 변경할 수 없는 객체를 의미
문자열 추가 삭제
문자열은 이뮤터블 객체이므로 기존 객체를 수정하는 것이 아니라 새로운 객체를 반환함
String string = "He"; // ➊
string += "llo"; // ➋
System.out.println(string); // "Hello"
그러므로 시간복잡도는 단순히 1번의 과정이 아니라
1. 새로운 객체 생성
2. "He" 값을 하나씩 복사 (2개 복사)
3. "He" 뒤에 "llo" 저장 (3개 저장)
시간 복잡도는 문자열의 길이가 N일 때, O(N)
문자열 수정
새로운 객체를 생성하지 않을 시엔 replace()를 사용한다
StringBuffer StringBuilder
위에 대한 시간복접도를 해결하기 위해서 해당 클래스를 사용한다
해당 클래스들은 뮤터블하므로 값을 변경할 때 시간 복잡도 관점에서 더 효율적이다
따라서 String값을 변경하는 연산이 많을 때는 효율이 높은 클래스를 사용해야되기 때 문에
주로 StringBuilder를 사용한다
StringBuilder 사용 예시
// StringBuilder 객체 생성
StringBuilder sb = new StringBuilder();
// 문자열 Add append() 메서드 사용
sb.append(10);
sb.append("ABC");
// 출력
System.out.println(sb); // 10ABC
sb.deleteCharAt(3); // 3번째 인덱스 문자 삭제
System.out.println(sb); // 10AC
sb.insert(1, 2); // 1번째 인덱스에 2라는 문자 추가
System.out.println(sb); // 120AC
'CS > 알고리즘' 카테고리의 다른 글
ArrayList 효율성 (0) | 2024.07.31 |
---|---|
메서드 - 람다식 (compare) (0) | 2024.07.31 |
Primitive Type & Reference Type (0) | 2024.07.30 |
정렬 알고리즘 2 (0) | 2024.07.30 |
기본 정렬 알고리즘 O(n^2) (0) | 2024.07.30 |