検索
ホームページJava&#&はじめるJavaの比較対象とコンパレータの違い

Javaの比較対象とコンパレータの違い

Nov 27, 2019 pm 01:20 PM
comparablecomparatorjava違いコンパレータ

Javaの比較対象とコンパレータの違い

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

Comparatorjava.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 サイトの他の関連記事を参照してください。

声明
この記事はCSDNで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

DVWA

DVWA

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

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MantisBT

MantisBT

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