✔ 입력
Scanner < BufferedReader
BufferedReader
클래스는 버퍼를 사용하기 때문에 Scanner 클래스 보다 속도가 월등히 빠르다.Scanner
클래스는 버퍼를 사용하지 않고, 읽는 과정에서 정규 표현식 적용, 입력값 분할, 파싱 등 여러 처리과정을 거친다.
- 하나의 입력만 받을 경우 Scanner를 사용하자!
➝ Scanner에서 제공하는 nextInt 메서드로 따로 형변환을 하지 않고 받은 입력 그대로를 사용할 수 있다.
- 입력이 여러줄 이거나 한줄에 여러 입력을 받을 경우 BufferedReader를 사용하자!
✔ 분리
StringTokenizer < String.split() / String.charAt()
StringTokenizer
의 구분자가 특수한 경우 검사를 해야하는 양이 늘어나서 split
보다 속도가 느릴 가능성이 높다. (공식문서도 split을 권장)
StringTokenizer
클래스는 객체를 생성해서 쓰기 때문에 아래와 같이 자리수가 정해져 있는 경우는 charAt
쓰는게 낫다.
while((line = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, " ");
// 객체를 생성하기 보단 아래와 같은 charAt을 이용
int a = line.charAt(0)-48;
int b = line.charAt(2)-48;
}
✔ 출력
String + String < StringBuilder
String
의 '+' 연산자를 쓸 경우 새로운 문자열 객체가 생성된다.
// 출력 시 String과 String을 '+' 연산자로 합치는 경우
System.out.println(String + String);
// 반복문을 돌면서 출력 하는 경우
while(true) {
System.out.println(String);
}
StringBuilder
클래스의 경우는 크기가 변경되면서 문자열을 변경한다.
StringBuilder sb = new StringBuilder;
while(true) {
sb.append(String);
}
System.out.println(sb);
- 위와 같은 이유로 StringBuilder 클래스가 String을 '+' 연산자로 합쳐서 사용하는 것과 계속적으로 출력문을 호출하는 것보다 속도가 빠르다.
Reference
https://dlee0129.tistory.com/238
https://href-born-to-code.tistory.com/185
https://madplay.github.io/post/difference-between-string-stringbuilder-and-stringbuffer-in-java