StringBuilder 클래스
-문자열을 저장하는 String은 내부의 문자열을 수정할 수 없음
-문자열을 결합하는 +연산자를 많이 사용하면 String객체의 수가 늘어나기 때문에 프로그램 성능을 느리게 하는 요인이 됨
요런 경우 우리가 활용할 수 있는 클래스 : StringBuffer / StringBuilder
=>내부 버퍼(buffer:데이터를 임시로 저장하는 메모리)에 문자열을 저장해두고 그 안에서 추가, 수정, 삭제 작업을 할 수 있게 해줌
StringBuffer |
StringBuilder |
멀티스레드 상황에서 사용할 수 있도록 동기화적용 | 단일 스레드 환경에서만 사용하도록 설계 |
따라서 StringBuilder를 위주로 공부를 해 봅시당. 스레드는 난 아직 잘 모르기 때무네무네무네무네
StringBuilder 생성자
StringBuilder() |
16개의 문자들을 저장할 수 있는 초기버퍼 만듦 |
StringBuileder(int capacity) |
capacity로 주어진 개수만큼 문자를 저장할 수 있는 초기버퍼 만듦 |
StringBuilder(String str) |
str로 주어진 매개값을 버퍼의 초기값으로 저장 |
StringBuilder 메소드
메소드 |
설명 |
append(...) |
문자열 끝에 주어진 매개값을 추가 |
insert(int offset, ...) |
문자열 중간에 주어진 매개값을 추가 |
delete(int start, int end) |
문자열의 일부분을 삭제 |
deleteCharAt(int index) |
문자열에서 주어진 index의 문자를 삭제 |
replace(int start, int end, String str) |
문자열의 일부분을 다른 문자열로 대치 |
StringBuilder reverse() |
문자열의 순서를 뒤바꿈 |
setCharAt(int index, char ch) |
문자열에서 주어진 index의 문자를 다른 문자로 대치 |
왜 이걸 굳이 사용하나 싶겠지만, 가장 단순한 이유로 System.out.println();이 시간과 메모리를 그케 잡아먹는다는 얘기가 있었다.
그래서 한 번만 실행할 수 있게 String자체에 출력하고 싶은 문자들을 한 번에 모아주는 거라고 한다.
그동안 혼자서 푼 알고리즘 문제들을 보면, 대부분의 for문에 출력하는 코드가 있었고, 그 포문이 한 번 돌 때마다 출력을 하곤 했었는데 그런 코드들을 append를 활용해서 String으로 저장해준 뒤 한 번만 출력하면 시간이 더 짧아질 수 있다는 것이다.
한 두줄의 코드야 차이가 얼마나 있겠어 하지만 몇 천 줄 몇 만 줄로 가면 그 시간이 장난 아니라고 하니 여러모로 생각을 해 볼 필요가 있겠다다다다다.
-----------------------------------------------------------------------------------------
문제: N을 입력받고 순서대로 출력하기
나는 이 문제를 for문을 통해서 풀곤 했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import java.util.Scanner; public class CountN { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int N = scan.nextInt(); for(int i=1 ; i<=N ; i++) { System.out.println(i); } scan.close(); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import java.util.*; public class CountN { public static void main(String[] args) { Scanner scan = new Scanner(System.in); StringBuilder sb = new StringBuilder(); int N = scan.nextInt(); for(int i=1 ; i<=N ; i++) { sb.append(i); } System.out.println(sb); scan.close(); } } | cs |
append()는 바로바로 뒤에 붙여주는 메소드이기 때무네무네무네무네
따라서 줄을 바꿔주는 \n도 함께 append해줘야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import java.util.*; public class CountN { public static void main(String[] args) { Scanner scan = new Scanner(System.in); StringBuilder sb = new StringBuilder(); int N = scan.nextInt(); for(int i=1 ; i<=N ; i++) { sb.append(i + "\n"); } System.out.println(sb); scan.close(); } } | cs |
이렇게 잘 나온다!
'건승하고있어요 > Java' 카테고리의 다른 글
[Collection] 스택(Stack, LIFO) 과 큐(Queue, FIFO) (0) | 2018.02.03 |
---|---|
[Collection] List컬렉션 - ArrayList, LinkedList (0) | 2018.02.03 |
Collection Framework 컬렉션 프레임워크 (0) | 2018.02.03 |
[입출력] StringTokenizer 클래스 / 자바 단어 자르기 (0) | 2018.02.02 |
for문/ 최대값 구하기, shift하기 (0) | 2018.01.30 |