한 걸음 두 걸음

자바 JAVA ] 사용자가 만든 데이터 객체 정렬시키기 / arraylist<객체> 정렬 / String 본문

Language/Java

자바 JAVA ] 사용자가 만든 데이터 객체 정렬시키기 / arraylist<객체> 정렬 / String

언제나 변함없이 2019. 12. 28. 16:37
반응형

https://onepinetwopine.tistory.com/487에서 간단히 보고 넘어갔었지만, 객체가 정렬되기 위해서는 어떤 것을 두고 정렬할 것인지 미리 정의되어있어야합니다. 이를 위해서 반드시 Comparable<T>인터페이스를 상속받고 implement method인 compareTo()함수를 재정의하여 기준을 세워주어야 합니다.

커스텀 데이터 객체 정렬시키기.

제가 가진 Market라는 클래스 안에는 name, phoneNum, address가 있다고 가정해봅시다.

class Market{
    String name;
    String phoneNum;
    String address;
}

그리고 이 데이터구조를 갖는 ArrayList가 있을 때 ArrayList<Market> ArrayList내부의 Market을 name 사전순으로 정렬시키기 위해서는 Market이 Comparable 인터페이스를 상속받는 클래스여야 합니다. 자바에서 기본적으로 제공하며, 객체의 크기를 비교하거나 정렬할 때 사용되는 것이 Comparable 인터페이스입니다. Comparable인터페이스를 상속받으면 compareTo 추상메소드를 하나 재정의해주어야합니다. 그러므로

  class Market implements Comparable<Store>{
      String name;
      String phoneNum;
      String address;

       @Override
      public int compareTo(Market m) {
          int compareResult = this.name.compareTo(m.name);
          if (compareResult < 0) {
              return -1;
          } else if (compareResult > 0) {
              return 1;
          }
          return 0;
      }
  }

처럼 Comparable를 상속받고 compareTo로 비교를 해주어야합니다. 여기서 String을 비교하는 것이기 때문에 String 라이브러리에서 지원하는 compareTo()함수를 사용합니다. 이는 두 문자열간 사전순으로 앞선 문자열인가(return -1) 앞서지 못한 문자열인가(return 1) 같은 문자열인가(return 0)를 비교해주는 함수입니다.

보다 자세하게는 A.compareTo(B)가 있을 때 A가 더 크면 1, B가 더 크면 -1, A와B가 같으면 0입니다.

이렇게 구현해주고나면,

  ArrayList<Market> arr = new ArrayList<>();
  arr.add();//여러가지 데이터를 넣었다고 가정
  Collections.sort(arr); //또는
  Arrays.sort(arr); //으로 

정렬시켜주면 name을 기준으로 정렬하게 됩니다.


보다 자세한 이론적 내용은 이전 포스팅 https://onepinetwopine.tistory.com/487을 참고해주세요~

반응형