백준을 풀다보니 여러 문자열을 붙여서 출력할 때 StringBuilder를 사용하는 사람들이 많았다.
그래서 검색해보니 성능면에서 더 뛰어나다고한다. 내용은 다음과 같다.
기존의 String 객체를 더하는 +
는 문자열을 붙일 때마다 새로운 String 객체를 생성하기 때문에 성능이 떨어진다.
String 연결시 새로운 객체를 생성해야 하는 이유는, String객체는 변경할 수 없기 때문!
반면 StringBuilder는 새로운 객체 생성이 아니라, 기존 객체에 더하는 방식! -> 성능을 더 개선시킬 수 있다.
StringBuilder sb = new StringBuilder();
sb.append("ABCDE");
sb.append("연결").append("연결");
String s = sb.toString();
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
int testNum = 0; // 반복 개수
int A,B = 0; // 정수 A,B
//StringBuilder 추가!!
StringBuilder sb = new StringBuilder();
testNum = Integer.parseInt(br.readLine());
for(int i=0; i<testNum; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
A = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
sb.append(A+B); // StringBuilder에 문자열 연결
sb.append("\n");
}
br.close();
bw.write(sb.toString()); // 출력
bw.flush();
bw.close();
}
}
for(int i=0; i<testNum; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
A = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
bw.write(A+B +"\n");
}
결과적으로 메모리와 속도 모두 개선되었다!
https://www.codejava.net/java-core/the-java-language/why-use-stringbuffer-and-stringbuilder-in-java
https://hardlearner.tistory.com/288