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

Rumah Java Javabermula java中的比較器comparable和Comparator的區(qū)別

java中的比較器comparable和Comparator的區(qū)別

Nov 27, 2019 pm 01:20 PM
comparable comparator java perbezaannya pembanding

java中的比較器comparable和Comparator的區(qū)別

Comparable比較器

Comparable 位于 java.lang 包下,本質(zhì)上是一個(gè)內(nèi)比較器,實(shí)現(xiàn)了 Comparable 的類可以自己比較,至于比較的結(jié)果如何則需要依賴于自然比較方法 compareTo 的實(shí)現(xiàn)。

compareTo 的返回值有 -1、0、1。若比較者大于被比較者,那么返回1,等于則返回0,小于返回-1。

Collections.sortArrays.sort 可以自動(dòng)對(duì)實(shí)現(xiàn) Comparable 的對(duì)象進(jìn)行排序。

免費(fèi)在線學(xué)習(xí)視頻推薦:java學(xué)習(xí)

示例如下,我們構(gòu)建一個(gè) node 對(duì)象,并通過 node 對(duì)象之間的比較驗(yàn)證 Comparable 的用法。

node 對(duì)象的實(shí)現(xiàn)如下:

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

可以看到,我們?yōu)?Node 實(shí)現(xiàn)了 Comparable 接口,并且重寫了 compareTo 方法。

先測(cè)試一下,我們創(chuàng)建10個(gè) Node 對(duì)象并添加進(jìn) List 中,然后把順序打亂。

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

現(xiàn)在輸出是亂序的,接下來我們使用 Collections.sort 對(duì)其進(jì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);
		for (Node node : list) {
			System.out.println(node);
		}
	}
}

Collections.sort 其實(shí)是按 compareTo 方法中的定義進(jìn)行比較,我們之前定義了按照 num 的升序進(jìn)行排序,現(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比較器

Comparator 位于 java.util 包下,本質(zhì)上是一個(gè)外比較器。若一個(gè)類內(nèi)部未實(shí)現(xiàn) Comparable 又或者實(shí)現(xiàn)了 Comparable 但該比較方式不是自己想要的,我們可以考慮實(shí)現(xiàn) Comparator。Comparator 接口里有一個(gè) compare 方法,使用方法與 Comparable 中的 compareTo 相同。

我們需要將 Comparator 傳遞給排序方法,以便對(duì)排序順序進(jìn)行控制。我們可以查看幾個(gè)排序方法的使用方法,發(fā)現(xiàn)其可以傳入一個(gè) Comparator 參數(shù)。

Collections.sort(List<T> list, Comparator<? super T> c);
Arrays.sort(T[] a, Comparator<? super T> c);

修改我們之前的 Node 對(duì)象,不再實(shí)現(xiàn) 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;
	}
	
}

我們嘗試通過傳入一個(gè) Comparator 來實(shí)現(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 實(shí)現(xiàn)了逆序比較。

總結(jié)

Comparable 是內(nèi)比較器,Comparator 是外比較器,若類沒有實(shí)現(xiàn) Comparable 接口但是需要對(duì)其進(jìn)行排序,我們可以考慮使用 Comparator 。從另一個(gè)角度看,使用 Comparable 接口的耦合性大于 Comparator ,因?yàn)楫?dāng)我們需要對(duì)比較算法進(jìn)行修改的時(shí)候還需要修改 Comparable 的實(shí)現(xiàn)類。

本文來自java快速入門欄目,歡迎大家一起來討論學(xué)習(xí)!

Atas ialah kandungan terperinci java中的比較器comparable和Comparator的區(qū)別. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Agnes Tachyon Build Guide | Musume Derby Pretty
2 minggu yang lalu By Jack chen
Oguri Cap Build Guide | Musume Derby Pretty
2 minggu yang lalu By Jack chen
Puncak: Cara Menghidupkan Pemain
3 minggu yang lalu By DDD

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Petua untuk menulis komen php Petua untuk menulis komen php Jul 18, 2025 am 04:51 AM

Kunci untuk menulis komen PHP adalah untuk menjelaskan tujuan dan spesifikasi. Komen harus menjelaskan "mengapa" dan bukannya "apa yang dilakukan", mengelakkan redundansi atau terlalu kesederhanaan. 1. Gunakan format bersatu, seperti docblock (/*/) untuk deskripsi kelas dan kaedah untuk meningkatkan keserasian dan keserasian alat; 2. Menekankan sebab -sebab di sebalik logik, seperti mengapa JS melompat perlu dikeluarkan secara manual; 3. Tambahkan gambaran keseluruhan gambaran sebelum kod kompleks, terangkan proses dalam langkah -langkah, dan membantu memahami idea keseluruhan; 4. Gunakan Todo dan Fixme secara rasional untuk menandakan item dan masalah untuk memudahkan penjejakan dan kerjasama berikutnya. Anotasi yang baik dapat mengurangkan kos komunikasi dan meningkatkan kecekapan penyelenggaraan kod.

Menulis komen php yang berkesan Menulis komen php yang berkesan Jul 18, 2025 am 04:44 AM

Komen tidak boleh cuai kerana mereka ingin menjelaskan sebab-sebab kewujudan kod dan bukannya fungsi, seperti keserasian dengan antara muka lama atau sekatan pihak ketiga, jika tidak, orang yang membaca kod itu hanya boleh bergantung pada meneka. Bidang yang mesti dikomentari termasuk penghakiman bersyarat kompleks, logik pengendalian kesilapan khas, dan sekatan pintasan sementara. Cara yang lebih praktikal untuk menulis komen ialah memilih komen tunggal atau menyekat komen berdasarkan tempat kejadian. Gunakan komen blok dokumen untuk menerangkan parameter dan pulangan nilai pada permulaan fungsi, kelas, dan fail, dan simpan komen dikemas kini. Untuk logik yang kompleks, anda boleh menambah garis kepada yang sebelumnya untuk meringkaskan niat keseluruhan. Pada masa yang sama, jangan gunakan komen untuk menutup kod, tetapi gunakan alat kawalan versi.

Meningkatkan kebolehbacaan dengan komen Meningkatkan kebolehbacaan dengan komen Jul 18, 2025 am 04:46 AM

Kunci untuk menulis komen yang baik adalah untuk menjelaskan "mengapa" daripada hanya "apa yang dilakukan" untuk meningkatkan kebolehbacaan kod. 1. Komen harus menjelaskan sebab -sebab logik, seperti pertimbangan di sebalik pemilihan nilai atau pemprosesan; 2. Gunakan anotasi perenggan untuk logik kompleks untuk meringkaskan idea keseluruhan fungsi atau algoritma; 3. Secara kerap mengekalkan komen untuk memastikan konsistensi dengan kod, elakkan mengelirukan, dan padamkan kandungan ketinggalan zaman jika perlu; 4. Secara serentak periksa komen semasa mengkaji semula kod, dan merekodkan logik awam melalui dokumen untuk mengurangkan beban komen kod.

Mengulas PHP yang berkesan Mengulas PHP yang berkesan Jul 18, 2025 am 04:33 AM

Kunci untuk menulis komen PHP adalah jelas, berguna dan ringkas. 1. Komen harus menjelaskan niat di sebalik kod itu dan bukan hanya menggambarkan kod itu sendiri, seperti menjelaskan tujuan logik penghakiman bersyarat kompleks; 2. Tambahkan komen kepada senario utama seperti nilai sihir, keserasian kod lama, antara muka API, dan lain -lain untuk meningkatkan kebolehbacaan; 3. Elakkan kandungan kod pendua, simpan ringkas dan spesifik, dan gunakan format standard seperti phpDoc; 4. Komen harus dikemas kini secara serentak dengan kod untuk memastikan ketepatan. Komen yang baik harus difikirkan dari perspektif orang lain, mengurangkan kos pemahaman, dan menjadi kod pemahaman peranti navigasi.

Persediaan Persekitaran Pembangunan PHP Persediaan Persekitaran Pembangunan PHP Jul 18, 2025 am 04:55 AM

Langkah pertama ialah memilih pakej persekitaran bersepadu XAMPP atau MAMP untuk membina pelayan tempatan; Langkah kedua ialah memilih versi PHP yang sesuai mengikut keperluan projek dan mengkonfigurasi pelbagai versi pertukaran; Langkah ketiga ialah memilih VSCode atau PHPStorm sebagai editor dan debug dengan XDebug; Di samping itu, anda perlu memasang komposer, php_codesniffer, phpunit dan alat lain untuk membantu dalam pembangunan.

Memahami jenis pembolehubah PHP Memahami jenis pembolehubah PHP Jul 17, 2025 am 04:12 AM

PHP mempunyai 8 jenis pembolehubah, yang biasa digunakan termasuk integer, float, rentetan, boolean, array, objek, null dan sumber. Untuk melihat jenis pembolehubah, gunakan fungsi siri getType () atau is_type (). PHP secara automatik akan menukar jenis, tetapi disyorkan untuk digunakan === untuk membandingkan logik utama dengan ketat. Penukaran manual boleh digunakan untuk sintaks seperti (int), (rentetan), dan sebagainya, tetapi berhati -hati bahawa maklumat mungkin hilang.

PHP mengulas sintaks PHP mengulas sintaks Jul 18, 2025 am 04:56 AM

Terdapat tiga cara biasa untuk menggunakan komen PHP: Komen line tunggal sesuai untuk menerangkan secara ringkas logik kod, seperti // atau # untuk penjelasan garis semasa; komen multi-line /*...*/ sesuai untuk penerangan terperinci mengenai fungsi atau kelas; Komen Dokumen DocBlock Mula dengan /** untuk memberikan maklumat segera untuk IDE. Apabila menggunakannya, anda harus mengelakkan karut, terus mengemas kini serentak, dan jangan gunakan komen untuk menyekat kod untuk masa yang lama.

Meneroka Sintaks PHP Asas Meneroka Sintaks PHP Asas Jul 17, 2025 am 04:11 AM

Sintaks PHP asas termasuk: 1. Gunakan kod pembalut; 2. Gunakan echo atau cetak ke kandungan output, di mana Echo menyokong pelbagai parameter; 3. Pembolehubah tidak perlu mengisytiharkan jenis, mulakan dengan $. Jenis biasa termasuk rentetan, integer, nombor terapung, boolean, tatasusunan dan objek. Menguasai perkara -perkara utama ini dapat membantu anda memulakan pembangunan PHP dengan cepat.

See all articles