본문 바로가기
공부/Java

[Java]자바의 정렬 라이브러리 Arrays.sort() / Collections.sort() / List.sort() 비교 정리

by happyeuni 2023. 1. 5.

Arrays.sort()

import java.util.Arrays;

Integer arr[] = new Integer[N];
for (int i = 0; i<N;i++){
	arr[i] = Integer.parseInt(br.readLine());
}

//오름차순
Arrays.sort(배열);

//내림차순
Arrays.sort(배열, Collections.reverseOrder());
  • 정렬 방식 : DualPivotQuicksort
  • 시간복잡도 : 평균 $O(nlogn)$ / 최악 $O(n^2)$

 

Collections.sort()

import java.util.Collections;

List<Integer> list = new ArrayList<>();
for (int i = 0; i<N;i++){
	list.add(Integer.parseInt(br.readLine()));
}

// 오름차순
Collections.sort(배열);

// 내림차순
Collections.sort(list, Collections.reverseOrder());
Collections.reverse(list);

// 대소문자 구분 없이 오름차순
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);

// 대소문자 구분 없이 내림차순
Collections.sort(list, Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER));
  • 정렬방식 : TimSort
  • 시간복잡도 : 평균,최악 $O(nlogn)$

 

 

List.sort() - Java 8 이후

import java.util.Comparator;

// 오름차순
list.sort(Comparator.naturalOrder());

// 내림차순
list.sort(Comparator.reverseOrder());

// 대소문자 구분 없이 오름차순
list.sort(String.CASE_INSENSITIVE_ORDER);

// 대소문자 구분 없이 내림차순
list.sort(Collectsion.reverseOrder(String.CASE_INSENSITVE_ORDER));

 

 

 

- Collections.sort() 정렬 시 해당 객체의 Comparable을 구현한 compareTo() 메소드를 참조하여 정렬 순서 결정

더보기
public class SortArrayList {
	public static void main(String[] args) {
		ArrayList<Student> list = new ArrayList<>();
		list.add(new Student(1,55));
		list.add(new Student(3,100));
		list.add(new Student(2,70));
	
		Collections.sort(list);
	}
}

class Student implements Comparable<Student>{
	int no, score;

	public Student(int no, int score){
		super();
		this.no = no;
		this.score = score;
	}

	@Override
	public int compareTo(Student o){
		return this.no - o.no; //no기준 오름차순
	}
}

 

- 사용자가 정의한 Comparator는 Collections.sort() 또는 List.sort() 메소드의 파라미터로 전달되어, 정렬의 기준이 됨.

더보기
public class SortArrayList {
	public static void main(String[] args) {
		ArrayList<Student> list = new ArrayList<>();
		list.add(new Student(1,55));
		list.add(new Student(3,100));
		list.add(new Student(2,70));
	
		Collections.sort(list, new StudentComparator());
	}
}

class StudentComparator implements Comparator<Student>{
	@Override
	public int compare(Student o1, Student o2){
		return o1.no - o2.no; 
	}
}

class Student{
	int no, score;
	
	public Student(int no, int score){
		super();
		this.no = no;
		this.score = score;
	}
}

 

 

 

모두 정렬의 순서는 다음과 같다.

  • 오름차순 : 숫자 - 대문자 - 소문자 - 한글 순
  • 내림차순 : 한글 - 소문자 - 대문자 - 숫자 순

참고

[Java]자바의 정렬 라이브러리 Arrays.sort() / Collections.sort() / List.sort() 비교 정리

댓글