Developer MJ Story

[Java/Arrays] java Arrays class를 활용한 object 정렬(sorting) 본문

Software/Java

[Java/Arrays] java Arrays class를 활용한 object 정렬(sorting)

집근처 2014. 7. 10. 14:33
반응형

이번 포스티에서는 sorting에 대해 알아보겠습니다.

Sorting 방법은 여러 가지가 있습니다. 그 중에서 가장 선호 하는 방식을 사용하면 됩니다.

저는 구현이 가장 쉬운 binary search를 선호 합니다.

저는 지금까지 직접 binary search를 구현해서 사용했습니다.

그래서 그때그때 코드 내용이 수정되고 바뀌고 그랬죠.

뭐 그래도 동작은 잘되니까…ㅋ

그런데, 최근에 알게 된 사실…..java에서 API로 sorting을 제공한다는 사실…..

저만 몰랐던 걸까요?? ㅠ.ㅠ

 

아무튼 그 매우 간단한 사용법에 대해 설명해 드리겠습니다.

 

Arrays.sort(arr);

 

이게 끝입니다..

정말 쉽습니다. 그런데 여기서 끝이면 포스팅을 따로 하지 않겠죠.

 

제목을 보셨으면 아시겠지만, Object sorting입니다.

java에서는 C 구조체 대신 class 그러니까 object 만들어서 관리를 하죠.

오늘 알아볼 내용이 Object 속성 단위로 sorting 하는 것입니다.

먼저 Info 라는 날짜와 숫자를 저장할 있는 class 만듦니다.

 

Sample입니다.

 

public class Info implements Comparable<Info>{

    private String name = "";

    private long num1 = 0;

    private long num2 = 0;

    

    public Info(String number, long agency, long foreign){

        name = number;

        num1 = agency;

        num2 = foreign;

    }

    

    public String getNumber(){

        return name;

    }

    

    public long getAgencyIncom(){

        return num1;

    }

    

    public long getForeignIncom(){

        return num2;

    }

    

    public boolean equals(Object other){

        return (name.equals(((Info)other).getNumber()));

    }

    

    public String toString(){

        return name + ", " + num1 + ", " + num2;

    }

 

    @Override

    public int compareTo(Info o) {

        // TODO Auto-generated method stub

        return this.name.compareTo(o.getNumber());

    }

}

 

먼저 name 기준으로 sorting하기 위해 info class Comparable<Info> implements 합니다.

그리고 마지막에 있는 compareTo 함수를 만들어 주면 됩니다.

아래와 같이 sample 만들고

 

Info[] arr = new Info[]{

    new Info("2014.07.07", -100, 100),

    new Info("2014.07.04", 10, -100),

    new Info("2014.04.07", 1000, 200),

    new Info("2014.02.07", -200, 4000),

    new Info("2014.01.07", 400, 4440),

    new Info("2014.07.03", -40, 100),

    new Info("2014.07.04", 90, 900)

};

 

Arrays.sort(arr);

호출하고,

System.out.println(Arrays.toString(arr))

Console 확인할 있습니다.

 

그리고 Info 번째, 번째 변수로 sorting하는 방법은 Comparator 이용하는 것입니다.

아래 sample 코드를 sorting class inner class 선언해 줍니다.

 

private class num1Comparator implements Comparator<Info>{

    @Override

    public int compare(Info o1, Info o2) {

        long agency1 = o1.getAgencyIncom();

        long agency2 = o2.getAgencyIncom();

        

        return agency1 > agency2 ? -1 :(agency1 == agency2 ? 0 : 1);

    }

    

}

 

private class num2Comparator implements Comparator<Info>{

    @Override

    public int compare(Info o1, Info o2) {

        long foreign1 = o1.getForeignIncom();

        long foreign2 = o2.getForeignIncom();

        

        return foreign1 > foreign2 ? -1 :(foreign1 == foreign2 ? 0 : 1);

    }        

}

 

sorting 호출한 class inner class 선언해 줘야 Arrays.sort 가능합니다.

사용법도 간단합니다. srot 번째 인자로 comparator 객체를 선언하면 됩니다.

 

Arrays.sort(arr, new num1Comparator());

System.out.println(Arrays.toString(arr));

      

Arrays.sort(arr, new num2Comparator());

System.out.println(Arrays.toString(arr));

 

알고 보니 정말 쉽죠?

반응형