成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java Comparable vs Comparator

KitorinZero / 2036人閱讀

摘要:和方法可以對(duì)數(shù)組進(jìn)行排序,但是這種方法排序要求對(duì)象所在的類必須實(shí)現(xiàn)接口,此接口用于指定排序規(guī)則如果一個(gè)類已經(jīng)開發(fā)完成,但是在此類建立的初期并沒有實(shí)現(xiàn)接口,此時(shí)肯定是無法進(jìn)行對(duì)象排序操作的,所以為了解決這個(gè)問題,定義了另一個(gè)比較器的操

Collections.sort() 和 Arrays.sort()方法可以對(duì)Object數(shù)組進(jìn)行排序,但是這種方法排序要求對(duì)象所在的類必須實(shí)現(xiàn)Comparable接口,此接口用于指定排序規(guī)則

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class HDTV implements Comparable {

    private int size;
    private String brand;

    public HDTV(int size, String brand) {
        this.size = size;
        this.brand = brand;
    }

public int getSize() {
    return size;
}

public void setSize(int size) {
    this.size = size;
}

public String getBrand() {
    return brand;
}

public void setBrand(String brand) {
    this.brand = brand;
}

@Override
public int compareTo(HDTV tv) {
    if (this.getSize() > tv.getSize())
        return 1;
    else if (this.getSize() < tv.getSize())
        return -1;
    else
        return 0;
}

public static void main(String[] args) {
    HDTV tv1 = new HDTV(55, "Samsung");
    HDTV tv2 = new HDTV(60, "Sony");
    HDTV tv3 = new HDTV(35, "Apple");

    List list = new ArrayList();
    list.add(tv1);list.add(tv2);list.add(tv3);

    Collections.sort(list);

    for (HDTV tv : list) {
        System.out.println(tv.getSize()+"---"+tv.getBrand());
    }


}

如果一個(gè)類已經(jīng)開發(fā)完成,但是在此類建立的初期并沒有實(shí)現(xiàn)Comparable接口,此時(shí)肯定是無法進(jìn)行對(duì)象排序操作的,所以為了解決這個(gè)問題,java定義了另一個(gè)比較器的操作接口--Comparator

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

class HDTV {
    private int size;
    private String brand;

    public HDTV(int size, String brand) {
        this.size = size;
        this.brand = brand;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }
}

class SizeComparator implements Comparator {
    @Override
    public int compare(HDTV tv1, HDTV tv2) {
        int tv1Size = tv1.getSize();
        int tv2Size = tv2.getSize();

        if (tv1Size > tv2Size) {
            return 1;
        } else if (tv1Size < tv2Size) {
            return -1;
        } else {
            return 0;
        }
    }
}

public class Main {
    public static void main(String[] args) {
        HDTV tv1 = new HDTV(55, "Samsung");
        HDTV tv2 = new HDTV(60, "Sony");
        HDTV tv3 = new HDTV(42, "Panasonic");

    ArrayList al = new ArrayList();
    al.add(tv1);
    al.add(tv2);
    al.add(tv3);

    Collections.sort(al, new SizeComparator());
    for (HDTV a : al) {
        System.out.println(a.getBrand());
    }
}

}

總結(jié):
Comparable 是一個(gè)對(duì)象本身就已經(jīng)支持自比較所需要實(shí)現(xiàn)的接口(如 String、Integer 自己就可以完成比較大小操作,已經(jīng)實(shí)現(xiàn)了Comparable接口)

用 Comparator 是策略模式(strategy design pattern),就是不改變對(duì)象自身,而用一個(gè)策略對(duì)象(strategy object)來改變它的行為

參考:Comparable vs Comparator in Java

其他資料:
Comparable與Comparator的區(qū)別

Java Sorting: Comparator vs Comparable Tutorial

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64150.html

相關(guān)文章

  • Java ComparatorComparable辨析

    摘要:與辨析聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處比較三種狀態(tài)根據(jù)需求定義序升序降序返回負(fù)數(shù),表示比較兩元素滿足序,無須調(diào)整,返回,表示比較兩元素相等,無須調(diào)整位置,返回正數(shù),表示比較兩元素不滿足序,按序調(diào)整位置對(duì)象內(nèi)部排序源碼繼承接口的對(duì)象必 Comparator與Comparable辨析 聲明 文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處:[1] https://segmentfault.co...

    wenhai.he 評(píng)論0 收藏0
  • Comparable and Comparator

    摘要:中的一切類都是繼承于,在中實(shí)現(xiàn)了函數(shù)所以,其它所有的類也相當(dāng)于都實(shí)現(xiàn)了該函數(shù)。是比較和的大小。返回負(fù)數(shù),意味著比小返回零,意味著等于返回正數(shù),意味著大于。 Comparable Comparable 是排序接口。 Collection.sort() 和Arrays.sort()都支持可以排序?qū)崿F(xiàn)Comparable接口的類的對(duì)象的List列表(或數(shù)組) 換而言之, 如果數(shù)組或列表想支持...

    Barrior 評(píng)論0 收藏0
  • Java? 教程(對(duì)象排序)

    對(duì)象排序 List l可以如下排序。 Collections.sort(l); 如果List包含String元素,它將按字母順序排序,如果它由Date元素組成,它將按時(shí)間順序排序,這是怎么發(fā)生的?String和Date都實(shí)現(xiàn)了Comparable接口,Comparable實(shí)現(xiàn)為類提供了自然的順序,允許該類的對(duì)象自動(dòng)排序,下表總結(jié)了一些實(shí)現(xiàn)Comparable的更重要的Java平臺(tái)類。 類 自然...

    Chao 評(píng)論0 收藏0
  • java comparablecomparator

    摘要:一內(nèi)部排序接口實(shí)現(xiàn)該接口的類,支持自然排序內(nèi)排序。方法與方法不一致。在有序集合看來和是相等的,因此第個(gè)鍵無法被添加到集合中。 一、Comparable(內(nèi)部排序接口) 實(shí)現(xiàn)該接口的類,支持自然排序(內(nèi)排序)。Arrays.sort(Object[])和Collection.sort(Object[])要求對(duì)象必須實(shí)現(xiàn)Comparable接口 文檔中指出: 如果該對(duì)象大于指定對(duì)象,返回...

    why_rookie 評(píng)論0 收藏0
  • Java TreeMap 源碼解析

    摘要:源碼剖析由于紅黑樹的操作我這里不說了,所以這里基本上也就沒什么源碼可以講了,因?yàn)檫@里面重要的算法都是,這里的是指,他們是算法導(dǎo)論的作者,也就是說里面算法都是參照算法導(dǎo)論的偽代碼。因?yàn)榧t黑樹是平衡的二叉搜索樹,所以其包含操作的時(shí)間復(fù)雜度都為。 本文章首發(fā)于個(gè)人博客,鑒于sf博客樣式具有賞心悅目的美感,遂發(fā)表于此,供大家學(xué)習(xí)、批評(píng)。本文還在不斷更新中,最新版可移至個(gè)人博客。? 繼上篇文章...

    rubyshen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<