Comparable コンパレータ
Comparable は java.lang パッケージの下にあります。これは本質的に内部コンパレータです。Comparable を実装するクラスは、それ自体で比較を実行できます。 、比較結果に関しては、自然な比較メソッドcompareToの実装に依存します。
compareTo の戻り値は -1、0、1 です。コンパレータが比較されるオブジェクトより大きい場合は 1 が返され、等しい場合は 0 が返され、比較されるオブジェクトより小さい場合は -1 が返されます。
Collections.sort
および Arrays.sort
は、Comparable を実装するオブジェクトを自動的に並べ替えることができます。
無料のオンライン学習ビデオの推奨: java 学習
例は次のとおりです。ノード オブジェクトを構築し、ノード オブジェクト間の比較を通じて Comparable の使用法を検証します。
ノード オブジェクトの実装は次のとおりです。
public class Node implements Comparable<Object>{ private int num; private String name; @Override public String toString() { return "num=" + num + " name=" + name; } public Node(int num, String name) { super(); this.num = num; this.name = name; } public Node() { super(); } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(Object o) { Node node = (Node)o; return this.num - node.getNum(); } }
ご覧のとおり、Node の Comparable インターフェイスを実装し、compareTo メソッドをオーバーライドしました。
最初にテストするために、10 個の Node オブジェクトを作成してリストに追加し、順序を入れ替えます。
public class MyTest { public static void main(String[] args) { List<Node> list = new ArrayList<Node>(); for(int i = 0;i < 10;i++) { list.add(new Node(i,"node")); } //打乱顺序 Collections.shuffle(list); for (Node node : list) { System.out.println(node); } } }
結果は次のように表示されます。
num=7 name=node num=0 name=node num=5 name=node num=9 name=node num=6 name=node num=3 name=node num=4 name=node num=8 name=node num=1 name=node num=2 name=node
出力の順序が崩れました。次に、Collections.sort を使用して並べ替えます。
public class MyTest { public static void main(String[] args) { List<Node> list = new ArrayList<Node>(); for(int i = 0;i < 10;i++) { list.add(new Node(i,"node")); } //打乱顺序 Collections.shuffle(list); Collections.sort(list); for (Node node : list) { System.out.println(node); } } }
Collections.sort は、compareTo メソッドの定義に従って実際に比較します。以前に num の昇順で並べ替えを定義しました。現在の並べ替え結果は次のようになります:
num=0 name=node num=1 name=node num=2 name=node num=3 name=node num=4 name=node num=5 name=node num=6 name=node num=7 name=node num=8 name=node num=9 name=node
Comparator
Comparator
は java.util
パッケージの下にあり、本質的には外部コンパレータです。クラスが内部的に Comparable を実装していない場合、または Comparable を実装しているが比較メソッドが必要なものではない場合は、Comparator の実装を検討できます。 Comparator インターフェースには Compare メソッドがあり、その使用法は Comparable の CompareTo と同じです。
並べ替え順序を制御するには、Comparator を並べ替えメソッドに渡す必要があります。いくつかの並べ替えメソッドの使用法を確認すると、それらのメソッドが Comparator パラメーターに渡せることがわかります。
Collections.sort(List<T> list, Comparator<? super T> c); Arrays.sort(T[] a, Comparator<? super T> c);
以前の Node オブジェクトを変更し、Comparable を実装しなくなりました。
public class Node{ private int num; private String name; @Override public String toString() { return "num=" + num + " name=" + name; } public Node(int num, String name) { super(); this.num = num; this.name = name; } public Node() { super(); } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
コンパレータを渡すことで降順ソートを実現しようとします。
public class MyTest { public static void main(String[] args) { List<Node> list = new ArrayList<Node>(); for(int i = 0;i < 10;i++) { list.add(new Node(i,"node")); } //打乱顺序 Collections.shuffle(list); Collections.sort(list, new Comparator<Node>() { @Override public int compare(Node o1, Node o2) { return o2.getNum()-o1.getNum(); } }); for (Node node : list) { System.out.println(node); } } }
結果は次のとおりです。
num=9 name=node num=8 name=node num=7 name=node num=6 name=node num=5 name=node num=4 name=node num=3 name=node num=2 name=node num=1 name=node num=0 name=node
Comparator は逆順比較を実装します。
概要
Comparable は内部コンパレータであり、Comparator は外部コンパレータです。クラスが Comparable インターフェイスを実装していないが、並べ替える必要がある場合は、次のことを考慮できます。コンパレータを使用します。別の観点から見ると、比較アルゴリズムを変更する必要がある場合は、Comparable の実装クラスも変更する必要があるため、Comparable インターフェイスを使用することの結合度は Comparator の結合度よりも大きくなります。
この記事は java クイック スタート コラムからのものです。皆さんも一緒に議論したり学んだりすることを歓迎します。
以上がJavaの比較対象とコンパレータの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

メモ帳++7.3.1
使いやすく無料のコードエディター

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
