개발자의 서재

[JAVA]Comparator 를 이용한 배열, List 정렬 본문

JAVA

[JAVA]Comparator 를 이용한 배열, List 정렬

ironmask431 2022. 2. 20. 21:18

기본적으로 배열은 Arrays

List는 Collections 를 이용해서

정수형타입 or 문자형타입으로 오름차순, 내림차순 정렬이 가능하다.

String[] numbers = {"1", "3", "2", "5", "4"};

//Arrays 를 이용한 배열정렬 (오름차순)
Arrays.sort(numbers);
for(String n : numbers) {System.out.print(n+",");}
//1,2,3,4,5,

//Arrays 를 이용한 배열정렬 (내림차순)
Arrays.sort(numbers,Collections.reverseOrder());
for(String n : numbers) {System.out.print(n+",");}
//5,4,3,2,1,


List<String> list = new ArrayList<String>();
list.add("2");
list.add("4");
list.add("1");
list.add("5");
list.add("3");

//리스트 기존 정렬 (오름차순)
Collections.sort(list);
for(String n : numbers) {System.out.print(n+",");}
//1,2,3,4,5,

//리스트 기본 정렬 (내림차순)
Collections.sort(list,Collections.reverseOrder());
for(String n : numbers) {System.out.print(n+",");}
//5,4,3,2,1,

 

별도의 정렬기준을 만드는 방법에는 Comparator 를 사용한 방법이 있다. 

(Comparator 의 compare(o1,o2) 는 String 타입의 비교만 가능하다.)

String[] numbers2 = {"3", "30", "32", "5", "9"};
		
// Comparator 로 별도 정렬기준을 만든다.
// 두 숫자를 문자형식으로 연결하여 합쳤을 때 더 큰수가 앞으로 오도록. 
// o1,o2를 순서대로 비교했을때 원하는조건에서 -1을 리턴하도록 설정
// 반대되는 조건에서는 1을 리턴하도록 설정함. 
// 같을때는 0 리턴
Arrays.sort(numbers2,new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        // TODO Auto-generated method stub
        int i = 0;
        int num1 = Integer.parseInt(o1+o2); 
        int num2 = Integer.parseInt(o2+o1);
        if(num1 > num2) { 
            i = -1;  //원하는조건 에서 -1 리턴하도록 설정
        }else if(num1 < num2) {
            i = 1; //반대조건에서 1리턴하도록 설정
        }
        return i;
    }
});	

for(String n : numbers2) {System.out.print(n+",");}
//9,5,3,32,30,

 

 

Comments