国产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裝するオブジェクトを自動的に並べ替えることができます。

無料のオンライン學(xué)習(xí)ビデオの推奨: java 學(xué)習(xí)

例は次のとおりです。ノード オブジェクトを構(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 の昇順で並べ替えを定義しました。現(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 を並べ替えメソッドに渡す必要があります。いくつかの並べ替えメソッドの使用法を確認(rèn)すると、それらのメソッドが 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 クイック スタート コラムからのものです。皆さんも一緒に議論したり學(xué)んだりすることを歓迎します。

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

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、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のマップを反復(fù)する方法は? Javaのマップを反復(fù)する方法は? Jul 13, 2025 am 02:54 AM

Javaにはマップを通過する3つの一般的な方法があります。1。エントリセットを使用してキーと値を同時に取得します。これは、ほとんどのシナリオに適しています。 2。キーセットまたは値をそれぞれキーまたは値を通過する。 3. Java8のForeachを使用して、コード構(gòu)造を簡素化します。 EntrySetは、すべてのキー値ペアを含むセットを返し、各ループはキーと値に頻繁にアクセスするのに適したMap.entryオブジェクトを取得します。キーまたは値のみが必要な場合は、それぞれkeyset()またはvalues()を呼び出すことができます。または、キーを橫斷するときにmap.get(key)を介して値を取得できます。 Java 8はForeachを使用できます((key、value) - &gt

Javaのキャラクターエンコーディングの問題を処理する方法は? Javaのキャラクターエンコーディングの問題を処理する方法は? Jul 13, 2025 am 02:46 AM

Javaのキャラクターエンコーディングの問題に対処するために、重要なのは、各ステップで使用されるエンコードを明確に指定することです。 1.テキストを読み書きするときは常にエンコードを指定し、inputstreamreaderとoutputStreamWriterを使用し、明示的な文字セットを渡して、システムのデフォルトエンコードに依存しないようにします。 2.ネットワーク境界で文字列を処理するときに両端が一貫していることを確認(rèn)し、正しいコンテンツタイプのヘッダーを設(shè)定し、ライブラリでエンコードを明示的に指定します。 3. string.getBytes()およびNewString(byte [])を注意して使用し、プラットフォームの違いによって引き起こされるデータの破損を避けるために、常に手動でstardantcharsets.utf_8を指定します。要するに、

c c Jul 15, 2025 am 01:30 AM

STD :: Chronoは、現(xiàn)在の時間の取得、実行時間の測定、操作時點と期間の測定、分析時間のフォーマットなど、時間の処理にCで使用されます。 1。STD:: Chrono :: System_Clock :: now()を使用して、現(xiàn)在の時間を取得します。 2。STD:: CHRONO :: STEADY_CLOCKを使用して実行時間を測定して単調(diào)さを確保し、DurateR_CASTを通じてミリ秒、秒、その他のユニットに変換します。 3。時點(Time_Point)と期間(期間)は相互運用可能ですが、ユニットの互換性と時計エポック(エポック)に注意を払う必要があります

ハッシュマップはJavaで內(nèi)部的にどのように機能しますか? ハッシュマップはJavaで內(nèi)部的にどのように機能しますか? Jul 15, 2025 am 03:10 AM

HashMapは、Javaのハッシュテーブルを介してキーと値のペアストレージを?qū)g裝し、そのコアはデータの位置をすばやく配置することにあります。 1.最初にキーのHashCode()メソッドを使用して、ハッシュ値を生成し、ビット操作を介して配列インデックスに変換します。 2。異なるオブジェクトは、同じハッシュ値を生成し、競合をもたらす場合があります。この時點で、ノードはリンクされたリストの形式で取り付けられています。 JDK8の後、リンクされたリストが長すぎ(デフォルトの長さ8)、効率を改善するために赤と黒の木に変換されます。 3.カスタムクラスをキーとして使用する場合、equals()およびhashcode()メソッドを書き直す必要があります。 4。ハッシュマップは容量を動的に拡大します。要素の數(shù)が容量を超え、負(fù)荷係數(shù)(デフォルト0.75)を掛けた場合、拡張して再ハッシュします。 5。ハッシュマップはスレッドセーフではなく、マルチスレッドでconcuを使用する必要があります

Javaの「靜的」キーワードは何ですか? Javaの「靜的」キーワードは何ですか? Jul 13, 2025 am 02:51 AM

Injava、thestatickeywordmeansameansmestotheclassit self、nottointances.staticvariablesaresharedacrossallinstancesは、Objedcreationを使用して、GlobalTrackingorconconstants.StaticMethododsodsodsoperateateClasslevel

トップジャワインタビューの質(zhì)問 トップジャワインタビューの質(zhì)問 Jul 14, 2025 am 01:59 AM

Javaインタビューの高周波の質(zhì)問は、主に基本的な構(gòu)文、オブジェクト指向、マルチスレッド、JVM、およびコレクションフレームワークに焦點を當(dāng)てています。最も一般的な質(zhì)問には、次のものが含まれます。1。バイト、ショート、int、long、float、double、char、booleanなど、8つの基本的なJavaデータ型があります。文字列は基本的なデータ型ではないことに注意する必要があります。 2.ファイナルは、クラス、メソッド、または変數(shù)を変更して不変を表すために使用され、最終的に例外処理でコード実行を確保するために使用されます。ファイナライズは、ガベージコレクションの前にクリーニングするためのオブジェクトクラスの方法です。 3.マルチスレッドの同期は、同期されたキーワード、ReentrantLock、およびVOを使用して実現(xiàn)できます。

PHP準(zhǔn)備されたステートメントが結(jié)果を得ます PHP準(zhǔn)備されたステートメントが結(jié)果を得ます Jul 14, 2025 am 02:12 AM

PHPのデータベースクエリを取得するために前処理ステートメントを使用してPHPの結(jié)果は拡張から変化します。 1。mysqliを使用する場合、get_result()およびfetch_assoc()を介して連想配列を取得できます。これは、最新の環(huán)境に適しています。 2. bind_result()を使用して変數(shù)をバインドすることもできます。これは、フィールドや固定構(gòu)造が少ない狀況に適しています。これは適切な互換性ですが、多くのフィールドがある場合は多くのフィールドがあります。 3. PDOを使用する場合、Fetch(PDO :: FETCH_ASSOC)を介して連想配列を取得するか、Fetchall()を使用してすべてのデータを一度に取得できます。さらに、パラメータータイプマッチング、execute()の実行、リソースのタイムリーなリリース、およびエラーレポートを有効にすることに注意を払う必要があります。

Javaの日付をSimpleDateFormatでフォーマットする方法は? Javaの日付をSimpleDateFormatでフォーマットする方法は? Jul 15, 2025 am 03:12 AM

SimpledateFormatを作成して使用するには、NewsimpledateFormat( "yyyy-mm-ddhh:mm:ss")などの形式の文字列を渡す必要があります。 2。ケースの感受性に注意を払い、混合シングルレター形式とYyyyとDDの誤用を避けます。 3。SimpleDateFormatはスレッドセーフではありません。マルチスレッド環(huán)境では、新しいインスタンスを作成するか、毎回Threadlocalを使用する必要があります。 4.解析方法を使用して文字列を解析する場合、parseexceptionをキャッチし、結(jié)果にタイムゾーン情報が含まれていないことに注意する必要があります。 5。DateTimeFormatterとLOを使用することをお勧めします

See all articles