Arrays.sort() 메서드
- Arrays 클래스는 배열의 복사, 항목 정렬, 검색과 같은 배열을 조작 기능을 가지고 있다
배열의 오름차순 정렬
import java.util.Arrays;
public class Test{
public static void main(String[] args) {
int arr[] = {15,4,99,58,49,80};
Arrays.sort(arr);
for (int i : arr) {
System.out.print("["+i+"]");
}
}
}
- String배열 오름차순 정렬(!!! String은 기본 타입이 아님)
- 문자열의 경우 수의 크기를 비교하는것이 아니라 자리수 상관없이 앞자리 부터 차례차례 한문자씩 비교하여 크기를 결정
import java.util.Arrays;
public class Test{
public static void main(String[] args) {
String arr[] = {"apple","null","sysout","trim","in","mac"};
Arrays.sort(arr);
for (String i : arr) {
System.out.print("["+i+"]");
}
}
}
- 배열 일부분 정렬: Arrays.sort(arr, 시작 index, 끝 index);
import java.util.Arrays;
public class Test{
public static void main(String[] args) {
int arr[] = {15,4,99,58,49,80};
Arrays.sort(arr, 0, 4);
System.out.println(arr[0]);
System.out.println(arr[3]);
for (int i : arr) {
System.out.print("["+i+"]");
}
}
}
Collections.reverseOrder() 메서드
import java.util.Arrays;
import java.util.Collections;
public class Test{
public static void main(String[] args) {
Integer arr[] = {15,4,99,58,49,80};
Arrays.sort(arr,Collections.reverseOrder());
for (int i : arr) {
System.out.print("["+i+"]");
}
}
}
import java.util.Arrays;
import java.util.Collections;
public class Test{
public static void main(String[] args) {
String arr[] = {"apple","null","sysout","trim","in","mac"};
Arrays.sort(arr,Collections.reverseOrder());
for (String i : arr) {
System.out.print("["+i+"]");
}
}
}
Interface Comparator
- Comparable 인터페이스를 구현한 클래스들의 기본 정렬 기준과 다르게 정렬 하고 싶을 때 사용하는 인터페이스
- 주로 익명 클래스로 사용
- 기존 규칙이 아닌 새로운 규칙으로 정렬하고자 할 때 사용
- compare() 메서드 작성법
- 첫 번째 파라미터로 넘어온 객체 < 두 번째 파라미터로 넘어온 객체: 음수(-1) 리턴
- 첫 번째 파라미터로 넘어온 객체 == 두 번째 파라미터로 넘어온 객체: 0 리턴
- 첫 번째 파라미터로 넘어온 객체 > 두 번째 파라미터로 넘어온 객체: 양수(1) 리턴
- 음수(-1) 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 변경
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
public class baekjoon_1181 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
String[] arr = new String[num];
for(int i = 0 ; i < num ; i++) {
arr[i] = br.readLine();
}
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if (s1.length() > s2.length()) {
return 1;
} else if (s1.length() < s2.length()) {
return -1;
} else {
return s1.compareTo(s2);
}
}
});
System.out.println(arr[0]);
for(int i = 1; i < num; i++) {
if (!arr[i].equals(arr[i - 1])) {
System.out.println(arr[i]);
}
}
}
}
익명클래스
- 익명클래스 생성시에는 상속받을 부모클래스 또는 구현할 인터페이스 이름과 함께 선언
- 클래스 정의 및 객체생성의 두단계를 거치지 않고, new 연산자로 객체 생성과 동시에 { } 안에 클래스 내용 정의
- 부모클래스이름 변수명 = new 부모클래스이름 {...내용 구현};
- 인터페이스이름 변수명 = new 인터페이스이름 {...내용 구현};