개발/java 2015.07.28 23:06

자바에서 배열 정렬하기

자바에서 배열 및 리스트를 오름차순 혹은 내림차순으로 정렬하려 한다면,

알맞은 소트 알고리즘을 이용해서 개인적으로 모듈화하여 계속 사용하면 제일 좋다.

하지만 배열의 크기가 그닥 크지도 않고, 굳이 고성능의 속도가 그닥 필요하지 않고, 임시적으로 사용할 용도라면

기본 자바 java.util 패키지에 있는 유용한 클래스로 간단하게 입맛대로 sort (정렬) 할 수 있다.


배열 (Arrays) 일때,

package com.sample.test01;

import java.util.Arrays;

public class SortTest {

	public static void main(String[] args) {

		int[] arr1 = new int[] { 5,3,7644,234 }; 

		Arrays.sort(arr1);
		
		for(int a : arr1){
			System.out.println(a);
		}
	}

}



그 결과는?



정렬 성공.

위에서 사용한 메소드는


public static void sort(int[] a)

Sorts the specified array into ascending numerical order.


말그대로 입력된 배열을, 오름차순으로 정렬한다. 


하지만 오름차순이 아니라 어떤 규칙을 정해 내입맛대로 정렬하고 싶을때는 어떻게 할까.

java.util.Arrays 클래스의 아래 메소드를 사용하면 된다.


public static <T> void sort(T[] a, Comparator<? super T> c)

Sorts the specified array of objects according to the order induced by the specified comparator. All elements in the array must be mutually comparable by the specified comparator (that is, c.compare(e1, e2) must not throw a ClassCastException for any elements e1 and e2 in the array).


아까 첫번째에 사용한 것과는 다르게 입력값이 하나 더 있다.

그 곳에 정렬하고자하는 기준을 구현한 클래스를 넣어주면 그 기준대로 정렬하게 된다.

단, Comparator 인터페이스를 구현해서 정의하면 된다.


말은 어렵지만 코딩을 보면 간단하다.

package com.sample.test01;

import java.util.Comparator;

public class ComparatorMyIntSort implements Comparator<Integer> {

	@Override
	public int compare(Integer o1, Integer o2) {

		if(o1 > o2){
			return -1;
		} else if (o1 == o2){
			return 0;
		} else {
			return 1;
		}
	}
}

제네릭 인터페이스를 구현하게 되므로, 원시 자료형은 사용불가이므로 Integer 클래스로 사용했다.

내림 차순을 구현한 케이스이다. 양수로 리턴되는 대로 순서대로 정렬된다 생각하면 편하다.

이 클래스를 이용하여 정렬하면 끝.

package com.sample.test01;

import java.util.Arrays;

public class SortTest {

	public static void main(String[] args) {

		Integer[] arr1 = new Integer[] { 5,3,7644,234 }; 

		Arrays.sort(arr1, new ComparatorMyIntSort());
		
		for(int a : arr1){
			System.out.println(a);
		}
	}

}


결과는?



내림차순으로 정렬이 잘되었다.

꼭 Integer 뿐만 아니라, String, Long, BigDecimal, 각종 사용자 Class 등등 

적용하여 사용자 정의에 맞추어 정렬할 수 있게 된다. 

객체지향이라는게 다시금 느껴지는 구석이다.

TOTAL 1,426,458 TODAY 95