본문 바로가기
자바(Java)/자바(Java) 잡다

자바(Java) Arrays.sort()와 Collections.sort()

by 인생즐겜러 2023. 2. 9.
728x90
반응형

둘의 큰 차이는

Arrays.sort()는 배열을 정렬해주고

Collections.sort()는 객체를 정렬해준다.

 

추가적으로 알고리즘에 따른 시간 복잡도 차이가 존재한다.

Arrays.sort()는 평균 시간복잡도가 O(nlogn) 이고 매우 빠른 알고리즘이나 최악의 경우 시간복잡도는 O(n2) 이다.

Collections.sort()는 평균 시간복잡도가 O(n) ~ O(nlogn)이다.

 

 

 


 

 

 

Array.sort()

기본적으로 오름차순으로 정렬을 한다.

java.util.Arrays 에 포함이 되어 있다.

정렬 기준은 숫자 > 대문자 > 소문자 > 한글순

 

 

 

Arrays.sort(정렬하고자 하는 객체, Collections.reverseOrder())

내림차순으로 정렬을 한다.

정렬 기준은 반대로 한글순 > 소문자 > 대문자 > 숫자

 

 

 

import java.util.*;

public class Main{
    public static void main(String args[]){
    	String[] str = {"1", "3", "2", "5", "4"};
		
        // 오름차순 정렬
	Arrays.sort(str);        
        for(String s : str){
            System.out.print(s + " ");
        }
        System.out.println();
        
        // 내림차순 정렬
        Arrays.sort(str, Collections.reverseOrder());         
        for(String s : str){
        	System.out.print(s + " ");
        }       
    } 
}



결과
1 2 3 4 5
5 4 3 2 1

 

 

 

 

 


 

 

 

 

 

Collections.sort() / Collections.reverse()

각각 오름차순과 내림차순이다.

비교의 기준을 정할 필요가 없는 객체의 경우

오름차순 기준 : 한글순 > 소문자 > 대문자 > 숫자

내림차순 기준 : 숫자 > 대문자 > 소문자 > 한글순

 

 

 

import java.util.*;

public class Main{
    public static void main(String args[]){
        ArrayList<Integer> num = new ArrayList<>();
        
        for(int i = 0 ; i < 5 ; i++){
            num.add(5-i);
        }
        
        Collections.sort(num);
       
        for(int i = 0 ; i < num.size() ; i++){
        	System.out.print(num.get() + " " )'
        }
                
    } 
}



결과
1 2 3 4 5

 

 

 

 

 

이런 일반 객체가 아닌 클래스 객체처럼 기준을 두고 비교를 해서 정렬을 해야하는 경우,

아래의 예시처럼

원하는 클래스 객체가 implements Comparable 를 받아서 compareTo 함수가 생성되어야 한다.

이 함수로 어떤 걸 기준으로 비교해서 매개변수로 넘길지가 결정 된다.

그 후 메인에서 Collections.sort() 를 사용 시,

정렬하고자하는 객체와 Compartor<클래스 객체> 를 인자로 받으면 정렬 됨.

 

import java.util.*;
 
class Student implements Comparable{
    int score;
    String name;
 
    Student (int score, String name) {
        this.score = score;
        this.name = name;
    }
 
    public int compareTo(Object obj){
        Student s2 = (Student)obj;
 
        return s2.score - this.score;
    }
 
    public String toString(){
        return score + "," + name;
    }
}
 
public class ComparableTest {
    public static void main(String[] args) {
        List<Student> list = new ArrayList<>();
        list.add(new Student(20,"lee"));
        list.add(new Student(15,"choi"));
        list.add(new Student(9,"kim"));
        list.add(new Student(12,"park"));
 
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                if (s1.score < s2.score) {
                    return -1;
                } else if (s1.score > s2.score) {
                    return 1;
                }
                return 0;
            }
        });
 
 
        for (Student s : list) {
            System.out.println(s.score);
        }
    }
}

 

728x90
반응형

댓글