Comparator & Comparable
2613 ワード
オブジェクトのソートに必要なメソッド(ソート基準を指定)を定義するインタフェース
ソート:sort().2つのターゲットを比較した後、位置を変更します.この手順を繰り返します->いずれの位置合わせも、この原理は同じです.(不変)
ただし、ソート基準は毎回異なる場合があります.(可変)->位置合わせによってのみ変化する部分を指定します.
のソートを行うには、次の2つのインタフェースを表すソートオブジェクトと基準が必要です. は、デフォルトのソート基準 を実施するために使用される.
デフォルトのソート条件以外の条件でソート
昇順、降順など、様々なソート基準があります.
ソート:sort().2つのターゲットを比較した後、位置を変更します.この手順を繰り返します->いずれの位置合わせも、この原理は同じです.(不変)
ただし、ソート基準は毎回異なる場合があります.(可変)->位置合わせによってのみ変化する部分を指定します.
// ex. 버블 정렬
// int[] intArr = {5, 3, 4, 0, 1, 2};
static void sort(int[] intArr) {
for (int i = 0; i < intArr.length - 1; i++) {
for (int j = 0; j < intArr.length - 1; j++) {
int tmp = 0;
if (intArr[j] > intArr[j + 1]) { // 비교 기준. 정렬 기준만 가변적임.
tmp = intArr[j];
intArr[j] = intArr[j + 1];
intArr[j + 1] = tmp;
}
}
}
}
// 정렬대상 정렬기준
static void sort(Object[] objArr, Comparator c) {
for (int i = 0; i < objArr.length - 1; i++){
for (int j = 0; j <objArr.length - 1; j++) {
Object tmp = null;
// 정렬 기준이 Comparator c로 넘어와서 정렬 기준(비교) 제공
if (c.compare(objArr[j], objArr[j+1]) > 0) {
tmp = objArr[j];
objArr[j] = objArr[j + 1];
objArr[j + 1] = tmp;
}
}
}
}
// default = comparable
static void sort(Object[] a) // 객체 배열에 저장된, 객체가 구현한 Comparable에 의한 정렬
static void sort(Object[] a, Comparator c) // 지정한 Comparator에 의한 정렬
Comparable
public interface Comparable {
int compareTo(Object o); // 주어진 객체(o)를 자신(this)과 비교
}
// Integer & Comparable
// 기본 정렬 기준 제공
public final class Integer extends Number implements Comparable {
public int compareTo(Object o) {
return compareTo((Integer) o);
}
public int compareTo(Integer anotherInteger) {
int thisVal = this.value;
int anotherVal = anotherInteger.value;
// -1, 0, 1
return (thisval < anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1));
// 위 리턴문은 아래와 같이 표현할 수도 있다. (음수, 0, 양수)
// 다만, 삼항연산자의 연산 속도가 조금이라도 더 빠르기 떄문에, 뺄셈보다는 삼항연산자를 사용한 것이다.
return thisVal - anotherVal
}
}
Comparator
デフォルトのソート条件以外の条件でソート
昇順、降順など、様々なソート基準があります.
public interface Comparator {
int compare(Object o1, Object o2); // o1, o2 두 객체를 비교 -> 정수값 반환.
// 값이 0이면 같은것, 양수면 왼쪽이 큰것, 음수면 오른쪽이 큰것
boolean equals(Object obj); // equals를 오버라이딩 하라는 뜻
}
Reference
この問題について(Comparator & Comparable), 我々は、より多くの情報をここで見つけました https://velog.io/@kimsy8979/Comparator-Comparableテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol