Comparable은 인터페이스로, 이 인터페이스를 클래스가 구현하면 리스트 등을 정렬하는데 사용할 수 있습니다.
Comparable의 compareTo()메소드의 리턴 값은 음수, 양수, 0이 될 수 있습니다. 음수가 리턴되면 인자의 순서가 아래로 내려갑니다.
public interface Comparable<T> {
public int compareTo(T o);
}
Comparable을 구현한 클래스
다음과 같이 Comparable
public class Text implements Comparable<Text> {
private String mText;
public Text(String text) {
mText = text;
}
public String getText() {
return mText;
}
@Override
public int compareTo(@NotNull Text right) {
return getText().length() - right.getText().length();
}
}
정렬 (sorting)
Collections.sort()
에 Comparable 객체의 리스트를 인자로 전달하면 정렬을 합니다. 정렬하는 기준은 위에서 구현한 compareTo() 메소드입니다.
public void comparableExample1() {
List<Text> texts = new ArrayList<>();
texts.add(new Text("This code is free software"));
texts.add(new Text("you can redistribute it"));
texts.add(new Text("under the terms of the GNU General Public License version 2 only"));
texts.add(new Text("This code is distributed in the hope that it will be useful"));
texts.add(new Text("Please contact Oracle"));
texts.add(new Text("500 Oracle Parkway, Redwood Shores, CA 94065 USA"));
// Sorting 하기 전에 출력
for (Text text : texts) {
System.out.println(text.getText());
}
// 문자 길이로 sorting (오름차순)
Collections.sort(texts);
// sorting 후 출력
System.out.println();
for (Text text : texts) {
System.out.println(text.getText());
}
}
결과
This code is free software
you can redistribute it
under the terms of the GNU General Public License version 2 only
This code is distributed in the hope that it will be useful
Please contact Oracle
500 Oracle Parkway, Redwood Shores, CA 94065 USA
Please contact Oracle
you can redistribute it
This code is free software
500 Oracle Parkway, Redwood Shores, CA 94065 USA
This code is distributed in the hope that it will be useful
under the terms of the GNU General Public License version 2 only
Comparator와의 차이점
Comparator는 정렬에 대한 규칙을 갖고 있는 클래스입니다.
compare()
의 리턴 값은 음수, 양수, 0이 될 수 있습니다.
보통 한번만 사용하고 안쓰기 때문에 다음과 같이 익명 객체로 만듭니다.
List<String> strings = new ArrayList<>();
strings.add("This code is free software");
strings.add("you can redistribute it");
strings.add("under the terms of the GNU General Public License version 2 only");
strings.add("This code is distributed in the hope that it will be useful");
strings.add("Please contact Oracle");
strings.add("500 Oracle Parkway, Redwood Shores, CA 94065 USA");
Collections.sort(strings, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});
결과
Please contact Oracle
you can redistribute it
This code is free software
500 Oracle Parkway, Redwood Shores, CA 94065 USA
This code is distributed in the hope that it will be useful
under the terms of the GNU General Public License version 2 only
조금 더 자세하 내용은 Java - Comparator로 정렬(Sorting)하는 방법를 참고해주세요.
참고
Loading script...
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기