Java比較器Compratorインターフェース


専用コンパレータComprator
Compratorは専用のコンパレータです。自己比較をサポートしていない場合や比較関数から要求を満たすことができない場合、コンパレータを書いて二つのオブジェクト間のサイズの比較を行うことができます。Compratorは、オブジェクト自体を変化させず、ポリシーオブジェクトを使用してその動作を変化させるポリシーモードを具現している。
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

class Student {
    private String name;
    private float score;

    public Student(String name, float score) {
        this.name = name;
        this.score = score;
    }
    public String getName() {
        return name;
    }
    public float getScore() {
        return score;
    }

    @Override
    public String toString() {
        return String.valueOf(this.name + ": " + this.score);
    }
}
class StudentComparator implements Comparator {
    @Override
    public int compare(Student o1, Student o2) {
        if (o2.getScore() - o1.getScore() > 0) {
            return 1;
        } else if (o2.getScore() - o1.getScore() < 0) {
            return -1;
        } else {
            return 0;
        }
    }
}
public class ComparableDemo {

    public static void main(String[] args) {
        TreeSet set = new TreeSet(new StudentComparator());
        set.add(new Student("zhangsan", 79));
        set.add(new Student("lisi", 95));
        set.add(new Student("wangwu", 87));
        for (Iterator iter = set.iterator(); iter.hasNext();) {
            System.out.println(iter.next());
        }
    }
}
印刷結果:lisi:95.0 wangwu:87.0 zhangsan:79.0
説明
Compratorインターフェースには二つの方法があります。一つはcompre方法、もう一つはequals方法ですが、多くの場合、一つのクラスでCompratorインターフェースを実現する時、equals方法を書き換える必要がないです。これはこの種類がObjectのequals方法を継承しているからです。
ComprableインターフェースとCompratorインターフェースの違い
  • の両方は、セット内の要素の比較、順序付けを実現するために使用されている。
  • Compparableは、セット内で定義された方法で実装された順序であり、java.utilパケット下の
  • に位置する。
  • Compratorは、セットの外部で実装された順序であり、java.langパッケージの下にある。
  • はもう一つの種類の設計が完成した後、最初はクラスの比較問題を考慮していなかったかもしれません。Comprableインターフェースを実現していません。大丈夫です。Compratorインターフェースを通じて完成できます。また、変更する必要がないです。