Comparable VS Comparator
2434 ワード
Comparable VS Comparator
CompareableとComparatorは、インタフェースを介してソート基準を実現するために使用されます.
Compareableの例
public class Edge implements Comparable<Edge>{
public int distance;
public String vertex;
public Edge(int distance, String vertex) {
this.distance = distance;
this.vertex = vertex;
}
@Override
public int compareTo(Edge e) {
return this.distance - e.distance;
}
}
public static void main(String[] args) {
final Edge edge1 = new Edge(10, "A");
final Edge edge2 = new Edge(260, "A");
final Edge edge3 = new Edge(30, "A");
Edge[] edges = new Edge[]{edge1, edge2, edge3};
Arrays.sort(edges);
for (Edge edge : edges) {
System.out.println(edge.getDistance());
}
}
実行結果
10,30,260
Comparatorの例
public static void main(String[] args) {
final Edge edge1 = new Edge(10, "A");
final Edge edge2 = new Edge(260, "A");
final Edge edge3 = new Edge(30, "A");
Edge[] edges = new Edge[]{edge1, edge2, edge3};
Arrays.sort(edges, new Comparator<Edge>() {
@Override
public int compare(Edge o1, Edge o2) {
return o2.getDistance() - o1.getDistance();
}
});
for (Edge edge : edges) {
System.out.println(edge.getDistance());
}
}
実行結果
260,30,10
Arrays.sort()とCompartor
Arrays.sort()メソッドは、2番目のパラメータにComparatorクラスを入れることができます.
オブジェクトにCompareableインタフェースが定義されている場合は、Compareatorクラスのソート基準に従ってソートできます.
ComparatorインタフェースはRamdaでも実現できる.
Arrays.sort(edges, (o1, o2) -> o2.getDistance() - o1.getDistance());
Reference
この問題について(Comparable VS Comparator), 我々は、より多くの情報をここで見つけました https://velog.io/@hyun6ik/Comparable-VS-Comparatorテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol