Arrays.sort()
public static void sort(Object[] a)
public static void sort(Object[] a, int fromIndex, int toIndex)
public static <T> void sort(T[] a, Comparator<? super T> c)
public static <T> void sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c)
특정 객체 배열을 오름차순으로 정렬해주는 메소드이다. sort 메소드를 사용하기 위해서는, 배열에 들어있는 요소가 Comparable 인터페이스를 상속받아야만 한다. 또한, compareTo 메소드를 통해 요소간 비교가 가능해야 한다. mergesort를 사용할 때와 같은 시간복잡도를 보장한다.
Parameters:
a : 정렬 할 배열
fromIndex : 정렬을 시작할 인덱스 번호
toIndex : 정렬을 마칠 인덱스 번호 (n을 입력 시, fromIndex부터 n-1번째 까지의 요소를 정렬한다.
c : 배열의 정렬 규칙을 결정하는 Comparator 객체. 이 값이 null일 경우 자연 정렬 순서를 따른다.
Throws:
ClassCastException : 배열의 요소끼리 비교가 불가능할 때 발생한다.
illegalArgumentException : 배열 요소의 자연 정렬 순서가 Comparable 규칙을 위반할 때 발생한다.
실행 예제
1) 기본 자료형 배열 정렬
import java.util.*;
public class Main {
public static void main(String[] args) {
// 1. int 배열 정렬
int[] intArray = {2,1,9,7,3,5,4,6,8};
System.out.println("int 배열 정렬");
Arrays.sort(intArray);
for(int i = 0 ; i < intArray.length ; i++){
System.out.print(intArray[i] + " ");
}
System.out.println(" ");
// 2. char 배열 정렬
char[] charArray = {'a', 'k', 'i', 'z', 'p', 'b', 'r'};
System.out.println("char 배열 정렬");
Arrays.sort(charArray);
for(int i = 0 ; i < charArray.length ; i++){
System.out.print(charArray[i] + " ");
}
System.out.println(" ");
// 3. string 배열 정렬
String[] stringArray = {"Tom", "James", "Jane", "Anna", "Chris"};
System.out.println("int 배열 정렬");
Arrays.sort(stringArray);
for(int i = 0 ; i < stringArray.length ; i++){
System.out.print(stringArray[i] + " ");
}
System.out.println(" ");
}
}
- 실행 결과
기본적으로 정해진 오름차순(정수는 0-9 순서, 문자는 a-z 순서)으로 정렬이 된 것을 확인할 수 있었다.
2) Comparator를 사용한 정렬
import java.util.*;
public class Main {
public static class Person implements Comparable<Person>{
int age;
String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public int compareTo(Person o) {
if(this.name.equals(o.name)){
return this.name.compareTo(o.name);
}else{
return this.age < o.age ? 1 : -1;
}
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
public static void main(String[] args) {
// 1. int 배열 내림차순 정렬
System.out.println("1. int 배열 내림차순 정렬");
Integer[] arr = {1,5,2,4,3};
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 < o2 ? 1 : -1;
}
});
// Arrays.sort(arr, (o1, o2) -> o2 - o1);
for(int i = 0 ; i < arr.length ; i++){
System.out.println(arr[i] + " ");
}
// 2. Person 클래스 정렬
System.out.println("2. Person 클래스 정렬");
Person[] personArray = new Person[5];
personArray[0] = new Person(25, "David");
personArray[1] = new Person(48, "Chris");
personArray[2] = new Person(22, "James");
personArray[3] = new Person(25, "Anne");
personArray[4] = new Person(35, "Kevin");
Arrays.sort(personArray);
for(int i = 0 ; i < personArray.length ; i++){
System.out.println(personArray[i].toString());
}
}
}
-실행 결과
int 배열의 경우 Arrays.sort()의 두번째 매개변수로 Comparator 객체를 넘겼다.
person 클래스 또한, Comparable을 implement한 뒤 Compare 메소드를 상속받아서 정렬 기준을 작성하였다. 나이가 많은 순서대로 정렬하며, 나이가 같을 시 이름 순서대로 정렬함을 확인할 수 있다.
- 참고 자료
docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#sort(char[],%20int,%20int)
Arrays (Java Platform SE 7 )
Sorts the specified array into ascending numerical order. Implementation note: The sorting algorithm is a Dual-Pivot Quicksort by Vladimir Yaroslavskiy, Jon Bentley, and Joshua Bloch. This algorithm offers O(n log(n)) performance on many data sets that cau
docs.oracle.com
'java' 카테고리의 다른 글
[210430] java 기본 자료형 (0) | 2021.04.30 |
---|---|
[210422] java Character, String 변환 (0) | 2021.04.22 |
[210409] java Deque - removeFirstOccurrence & removeLastOccurrence 메소드 (0) | 2021.04.09 |
[210316] java에서 난수 생성하기 - Math.random()과 Random 클래스 (0) | 2021.03.16 |
[210209] java StringTokenizer (0) | 2021.02.09 |