한 걸음 두 걸음
자바 JAVA ] 사용자가 만든 데이터 객체 정렬시키기 / arraylist<객체> 정렬 / String 본문
자바 JAVA ] 사용자가 만든 데이터 객체 정렬시키기 / arraylist<객체> 정렬 / String
언제나 변함없이 2019. 12. 28. 16:37https://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을 참고해주세요~
'Language > Java' 카테고리의 다른 글
자바 JAVA 시프트연산자 << >> >>> (0) | 2020.01.22 |
---|---|
String 단어 한개씩 쪼개기 (0) | 2020.01.22 |
JAVA 자바] inner interface 중첩인터페이스 (0) | 2019.12.24 |
자바 JAVA ] 함수 실행시간 걸린시간 측정 / ms단위 (0) | 2019.12.19 |
Intellij ] 공식문서 팝업 나타나게 하기 / intellij documentation popup (1) | 2019.12.19 |