String, StringBuilder, StringBuffer
String : immutable (변경 불가능)
- String 변수의 값을 수정하면, 매번 새로운 상수값이 할당됨.
- String의 이런 비효율적인 문제를 해결하는 방법 --> StringBuilder, StringBuffer
StringBuilder : mutable (변경 가능)
- append() 메소드 사용.
- 멀티 스레딩에서 동기화 안됨. 그래서 좀더 빠르다.
StringBuffer : mutable (변경 가능)
- append() 메소드 사용.
- 멀티 스레딩에서 동기화 됨. 그래서 좀더 느리지만 안전하다.
[입출력] Scanner와 BufferedReader
Scanner : 편하지만 느리다. (백만개 입력 시 2.5 초)
BufferedReader : 빠르지만 사용법이 번거롭다. (백만개 입력 시 0.5초 걸림)
- 일반적인 사용법 : 한 줄을 통째로 입력받음. (readLine())
- 입력을 int 로 변경하는 방법: int b = Integer.parseInt(br.readLine())
- or (char) br.read()
- 참고: 출력 내용이 2줄 이상이 넘어가면, 여러 번 출력하지 말고 StringBuilder 에 담아 한번에 출력하면 시간이 절약된다.
[정렬] Comparable과 Comparator
Comparable : 클래스의 기본 정렬 기준을 설정하는 인터페이스 .
Comparator : 기본 정렬 기준과는 다르게 정렬하고 싶을 때 사용하는 클래스.
Comparable 인터페이스
- 정렬 수행 시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의해 놓는 인터페이스.
- Comparable 인터페이스를 구현한 뒤, 내부에 있는 compareTo() 메소드를 원하는 정렬 기준대로 구현한다.
- compareTo() : 리턴이 양수이면, 자리바꿈 수행, 0 이나 음수이면 자리바꿈 안함.
- java.lang.Comparable
- 자바에서 제공되는 정렬이 가능한 클래스는 모두 Comparable 인터페이스를 구현하고 있으며, 정렬 시에 Comparable 구현에 맞춰 정렬된다. ( Ex Arrays.sort() )
Comparator 클래스
- 정렬 가능한 클래스 (Comparable이 구현된 클래스) 들의 기본 정렬 기준과는 다른 방식으로 정렬하고 싶을 때 사용한다.
- Comparator 클래스를 생성하여, 내부에 compare() 메서드를 원하는 정렬 기준대로 구현한다.
- java.util.Comparator
- 주로 익명클래스(new Comparator(){…}) 로 사용되며, 기본적으로 오름차순이 정렬 기준인 것을 내림차순으로 정렬하는 등의 용도로 사용된다.