자바 배열 정렬하기
public static void main(String[] args) {
int [] d = {8,2,6,4};
String [] s ={"d","b","a","c"};
System.out.println(Arrays.toString(d));
System.out.println(Arrays.toString(s));
}
위와같은 코드를 실행한다면 아래와 같은 출력값을 얻을 수 있습니다.
그런데 배열의 값이 정렬이 안돼있을 때, 어떻게 하면 정렬을 할 수 있을까요?
Arrays.sort()
자바에서 리스트나 배열을 정렬할 떄는 java.util.Arrays 클래스의 sort() 함수를 사용하면됩니다.
위에서 보시는 것처럼 static void로 정적메소드에 리턴값이 없기 때문에 따로 인스턴스를 만들지 않고 바로 클래스로 함수에 접근하며 변수에 재할당하지 않아도 값이 변합니다.
오름차순이 기본값인데 이는 class 내에 기본적으로 구현돼있는 Comparable interface의 compareTo()를 기준으로 정렬하기 때문입니다. (Java에서 같은 타입의 인스턴스를 비교하는 클래스는 모두 Comparable 인터페이스를 구현합니다.)
오름차순 정렬
Arrays.sort(s);
Arrays.sort(d);
System.out.println("오름차순"+Arrays.toString(d));
System.out.println("오름차순"+Arrays.toString(s));
그러면 아래와 같이 출력됩니다.
내림차순 정렬
내림차순의 경우 2변째 변수에 Collections.reverseOrder()를 추가합니다.(Collections클래스는 배열과 리스트같은 객체를 조작하는게 목적으로 일부를 반환,변환할 수 있습니다.) 단 Collections클래스는 primitive type를 사용할 수 없기에 wrapper class로 박싱해줘야합니다.
Integer dd[] = new Integer[d.length];
for(int i=0;i<d.length;i++){
dd[i] = d[i];
}
Arrays.sort(dd, Collections.reverseOrder());
Arrays.sort(s, Collections.reverseOrder());
System.out.println("내림차순"+Arrays.toString(dd));
System.out.println("내림차순"+Arrays.toString(s));
그러면 아래와 같이 출력됩니다.
따로 기준 추가
Arrays.sort()안에 2,3번쨰 변수로 시작index, 끝index+1을 넣어주시면 지정한 index에 한해 정렬을 합니다.
아래처럼 변수를 넣을시 d[2]~d[5]까지 {6,4,3,1}만 정렬이 되고 s[1]~s[4]까지인 {“b”,”a”,”f”,”c”}만 정렬이 됩니다.
int [] d = {8,2,6,4,3,1};
String [] s ={"d","b","a","f","c"};
Arrays.sort(d,2,6);
Arrays.sort(s,1,5);
그러면 아래와같이 출력됩니다.
댓글남기기