国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

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

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

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

Comparable コンパレータ

Comparable は java.lang パッケージの下にあります。これは本質(zhì)的に內(nèi)部コンパレータです。Comparable を?qū)g裝するクラスは、それ自體で比較を?qū)g行できます。 、比較結(jié)果に関しては、自然な比較メソッドcompareToの実裝に依存します。

compareTo の戻り値は -1、0、1 です。コンパレータが比較されるオブジェクトより大きい場合は 1 が返され、等しい場合は 0 が返され、比較されるオブジェクトより小さい場合は -1 が返されます。

Collections.sort および Arrays.sort は、Comparable を?qū)g裝するオブジェクトを自動的に並べ替えることができます。

無料のオンライン學習ビデオの推奨: java 學習

例は次のとおりです。ノード オブジェクトを構(gòu)築し、ノード オブジェクト間の比較を通じて 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 インターフェイスを?qū)g裝し、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);
		}
	}
}

結(jié)果は次のように表示されます。

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 の昇順で並べ替えを定義しました?,F(xiàn)在の並べ替え結(jié)果は次のようになります:

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 パッケージの下にあり、本質(zhì)的には外部コンパレータです。クラスが內(nèi)部的に Comparable を?qū)g裝していない場合、または Comparable を?qū)g裝しているが比較メソッドが必要なものではない場合は、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 を?qū)g裝しなくなりました。

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;
	}
	
}

コンパレータを渡すことで降順ソートを?qū)g現(xiàn)しようとします。

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);
		}
	}
}

結(jié)果は次のとおりです。

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 は逆順比較を?qū)g裝します。

概要

Comparable は內(nèi)部コンパレータであり、Comparator は外部コンパレータです。クラスが Comparable インターフェイスを?qū)g裝していないが、並べ替える必要がある場合は、次のことを考慮できます。コンパレータを使用します。別の観點から見ると、比較アルゴリズムを変更する必要がある場合は、Comparable の実裝クラスも変更する必要があるため、Comparable インターフェイスを使用することの結(jié)合度は Comparator の結(jié)合度よりも大きくなります。

この記事は java クイック スタート コラムからのものです。皆さんも一緒に議論したり學んだりすることを歓迎します。

以上がJavaの比較対象とコンパレータの違いの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java Classloadersの動作方法 Java Classloadersの動作方法 Jul 06, 2025 am 02:53 AM

Javaのクラスロードメカニズムはクラスローダーを介して実裝されており、そのコアワークフローは、読み込み、リンク、初期化の3つの段階に分けられます。ローディングフェーズ中、クラスローダーはクラスのバイトコードを動的に読み取り、クラスオブジェクトを作成します。リンクには、クラスの正しさの確認、靜的変數(shù)へのメモリの割り當て、およびシンボル?yún)⒄栅谓馕訾蓼欷蓼?。初期化は、靜的コードブロックと靜的変數(shù)割り當てを?qū)g行します。クラスの読み込みは、親クラスローダーに優(yōu)先順位を付けてクラスを見つけ、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを順番に試して、コアクラスライブラリが安全であり、重複した負荷を回避することを確認します。開発者は、urlclasslなどのクラスローダーをカスタマイズできます

現(xiàn)代のジャワの非同期プログラミング技術(shù) 現(xiàn)代のジャワの非同期プログラミング技術(shù) Jul 07, 2025 am 02:24 AM

Javaは、Java19での完了可能なストリーム(ProjectReactorなど)、仮想スレッドの使用など、非同期プログラミングをサポートしています。 1.CompletableFutureチェーンコールを通じてコードの読みやすさとメンテナンスを改善し、タスクオーケストレーションと例外処理をサポートします。 2。ProjectReactorは、バックプレッシャーメカニズムとリッチ演算子を備えた応答性プログラミングを?qū)g裝するためのモノとフラックスタイプを提供します。 3.仮想スレッドは、同時性コストを削減し、I/O集約型タスクに適しており、従來のプラットフォームスレッドよりも軽量で拡張が容易です。各方法には適用可能なシナリオがあり、適切なツールをお客様のニーズに応じて選択する必要があり、混合モデルはシンプルさを維持するために避ける必要があります

Java Nioとその利點を理解する Java Nioとその利點を理解する Jul 08, 2025 am 02:55 AM

Javanioは、Java 1.4によって導入された新しいIoapiです。 1)バッファとチャネルを?qū)澫螭趣筏皮い蓼埂?)バッファ、チャネル、セレクターのコアコンポーネント、3)ノンブロッキングモードをサポートし、4)従來のIOよりも効率的に並行接続を処理します。その利點は、次のことに反映されます。1)非ブロッキングIOはスレッドオーバーヘッドを減らし、2)データ送信効率を改善し、3)セレクターがマルチプレックスを?qū)g現(xiàn)し、4)メモリマッピングはファイルの読み取りと書き込みを速めます。注:1)バッファのフリップ/クリア操作は混亂しやすく、2)不完全なデータをブロックせずに手動で処理する必要があります。3)セレクター登録は時間內(nèi)にキャンセルする必要があります。4)NIOはすべてのシナリオに適していません。

匿名のインナークラスとは何ですか? 匿名のインナークラスとは何ですか? Jul 07, 2025 am 02:18 AM

匿名の內(nèi)部クラスは、Javaでサブクラスを作成したり、その場でインターフェイスを?qū)g裝するために使用され、GUIアプリケーションでのイベント処理など、特定の目的を達成するための方法をオーバーライドするためによく使用されます。その構(gòu)文フォームは、クラス本體を直接定義する新しいインターフェイスまたはクラスであり、アクセスされるローカル変數(shù)が最終的または同等の不変でなければならないことを要求します。それらは便利ですが、使いすぎてはいけません。特にロジックが複雑な場合は、Java8のLambda式に置き換えることができます。

Javaで酵素を使用するためのベストプラクティス Javaで酵素を使用するためのベストプラクティス Jul 07, 2025 am 02:35 AM

Javaでは、列挙は固定定數(shù)セットを表すのに適しています。ベストプラクティスには以下が含まれます。1。列挙を使用して固定狀態(tài)またはオプションを表して、タイプの安全性と読みやすさを改善します。 2.フィールド、コンストラクター、ヘルパーメソッドなどの定義など、柔軟性を高めるために、酵素にプロパティとメソッドを追加します。 3. enummapとEnumsetを使用して、パフォーマンスとタイプの安全性を向上させ、配列に??基づいてより効率的であるためです。 4.動的値、頻繁な変更、複雑なロジックシナリオなどの列挙の悪用を避けてください。これらは他の方法に置き換える必要があります。列挙の正しい使用は、コードの品質(zhì)を改善し、エラーを減らすことができますが、適用される境界に注意を払う必要があります。

スタブコインの種類は何ですか?デジタル通貨のstablecoinsは何ですか? スタブコインの種類は何ですか?デジタル通貨のstablecoinsは何ですか? Jul 08, 2025 pm 11:51 PM

安定したコインは、主に3つのカテゴリに分かれている米ドルなどのフィアット通貨を固定することにより、価格の安定性を維持します。 2。DAIなどの暗號通貨の擔保タイプ。 3.アルゴリズムのタイプには、より高いリスクがあります。主流のスタブコインには、最高の市場価値と最高の流動性を持つUSDTが含まれます。 USDCは、コンプライアンスと透明性で知られています。 DAIは分散メカニズムに依存しています。 TUSDは、オンチェーンリアルタイム監(jiān)査を採用しています。 Busdは、監(jiān)督のために徐々に市場から撤退しています。 USDPは、高いコンプライアンスとセキュリティで知られています。どちらも主流の交換で広く流通しています。

オンチェーントランザクションとオフチェーントランザクションとは何ですか?違いは何ですか? オンチェーントランザクションとオフチェーントランザクションとは何ですか?違いは何ですか? Jul 07, 2025 pm 08:45 PM

オンチェーントランザクションは、ブロックチェーンネットワーク上のトランザクションです。それらはオープンで透明で、改ざん防止、分散化された高度なセキュリティですが、より遅く、高い料金を持ち、取り返しやすいです。オフチェーントランザクションはブロックチェーンの外で発生し、高速、低料金、取り消し可能な利點がありますが、集中施設(shè)に依存し、透明性とセキュリティが欠けています。 1.オンチェーン取引にはガス料金が必要であり、セキュリティと透明性を追求するユーザーに適したブロック確認を待ちます。 2。オフチェーントランザクションは効率的で、高周波および小規(guī)模のトランザクションに適していますが、信頼プラットフォームです。 3。オンチェーントランザクションをサポートするプラットフォームには、UNISWAP、PANCAKESWAP、OPENSEA、AAVEなどの分散型プラットフォームが含まれます。 4。オフチェーントランザクションをサポートするプラットフォームには、主にBINANCが含まれます

JavaのSingletonデザインパターンとは何ですか? JavaのSingletonデザインパターンとは何ですか? Jul 09, 2025 am 01:32 AM

JavaのSingleton Design Patternは、クラスに1つのインスタンスしかないことを保証し、プライベートコンストラクターと靜的方法を介したグローバルアクセスポイントを提供することを保証します。これは、共有リソースへのアクセスを制御するのに適しています。実裝方法には以下が含まれます。1。レイジーロード、つまり、インスタンスは最初のリクエストが要求されたときにのみ作成されます。これは、リソースの消費が高く、必ずしも必要ではない狀況に適しています。 2。スレッドセーフ処理。同期方法または再確認ロックを介して、マルチスレッド環(huán)境で1つのインスタンスのみが作成され、パフォーマンスへの影響が低下するようにします。 3.クラスの読み込み中にインスタンスを直接初期化するHungry Loadingは、事前に初期化できる軽量オブジェクトまたはシナリオに適しています。 4.列挙の実裝は、Java列挙を使用してシリアル化、スレッドの安全性をサポートし、反射攻撃を防止することは、推奨される簡潔で信頼できる方法です。特定のニーズに応じて、さまざまな実裝方法を選択できます

See all articles