Java中Comparable和Comparator接口有什么區(qū)別

這篇文章給大家介紹Java中Comparable和Comparator接口有什么區(qū)別,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)公司自2013年起,先為互助等服務(wù)建站,互助等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為互助企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

Comparable 簡(jiǎn)介

Comparable 是排序接口

若一個(gè)類實(shí)現(xiàn)了Comparable接口,就意味著“該類支持排序”。此外,“實(shí)現(xiàn)Comparable接口的類的對(duì)象”可以用作“有序映射(如TreeMap)”中的鍵或“有序集合(TreeSet)”中的元素,而不需要指定比較器。
接口中通過x.compareTo(y)來比較x和y的大小。若返回負(fù)數(shù),意味著x比y??;返回零,意味著x等于y;返回正數(shù),意味著x大于y。

Comparator 是比較器接口

我們?nèi)粜枰刂颇硞€(gè)類的次序,而該類本身不支持排序(即沒有實(shí)現(xiàn)Comparable接口);那么,我們可以建立一個(gè)“該類的比較器”來進(jìn)行排序。這個(gè)“比較器”只需要實(shí)現(xiàn)Comparator接口即可。也就是說,我們可以通過“實(shí)現(xiàn)Comparator類來新建一個(gè)比較器”,然后通過該比較器對(duì)類進(jìn)行排序。
int compare(T o1, T o2)和上面的x.compareTo(y)類似,定義排序規(guī)則后返回正數(shù),零和負(fù)數(shù)分別代表大于,等于和小于。

兩者的聯(lián)系
Comparable相當(dāng)于“內(nèi)部比較器”,而Comparator相當(dāng)于“外部比較器”。

代碼實(shí)現(xiàn)

package mytest;import java.util.*;/**
 * @                           _ooOoo_
 *                            o8888888o
 *                            88">public class LearnCompare{
   
   
   public static void main(String[] args){
   
   
   
		List<Node> list = new ArrayList<Node>();
		list.add(new Node("yguo", 25));
		list.add(new Node("msdfj", 22));
		list.add(new Node("skf", 20));
		list.add(new Node("sfe", 23));
		System.out.println("===Age排序外部比較器===");
		Collections.sort(list, new Comparator<Node>(){
   
   
   @Overridepublic int compare(Node o1, Node o2){
   
   
   return o1.getAge() - o2.getAge();}});for (Iterator<Node> it = list.iterator(); it.hasNext(); ){
   
   
   
			System.out.println(it.next());}
		System.out.println("===Name排序外部比較器====");
		Collections.sort(list, new Comparator<Node>(){
   
   
   @Overridepublic int compare(Node o1, Node o2){
   
   
   return o1.getName().compareTo(o2.getName());}});for (Iterator<Node> it = list.iterator(); it.hasNext(); ){
   
   
   
			System.out.println(it.next());}
		System.out.println("===Age排序 內(nèi)部比較器===");
		Collections.sort(list);for (Iterator<Node> it = list.iterator(); it.hasNext(); ){
   
   
   
			System.out.println(it.next());}}}//class Node implements Comparable<Node>{
   
   
   private String name;private int age;public Node(String name, int age){
   
   
   this.name = name;this.age = age;}public String getName(){
   
   
   return name;}public void setName(String name){
   
   
   this.name = name;}public int getAge(){
   
   
   return age;}public void setAge(int age){
   
   
   this.age = age;}@Overridepublic int compareTo(Node other){
   
   
   if (age > other.getAge())return -1;if (age < other.getAge())return 1;return 0;}@Overridepublic String toString(){
   
   
   return "Name " + name + " age " + age;}}

關(guān)于Java中Comparable和Comparator接口有什么區(qū)別就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

本文題目:Java中Comparable和Comparator接口有什么區(qū)別
當(dāng)前路徑:http://muchs.cn/article38/pdpgsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、網(wǎng)站排名小程序開發(fā)、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)