午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術文章
文章詳情頁

Java Comparable及Comparator接口區(qū)別詳解

瀏覽:25日期:2022-08-30 08:31:25

在實際應用中,我們往往有需要比較兩個自定義對象大小的地方。而這些自定義對象的比較,就不像簡單的整型數(shù)據(jù)那么簡單,它們往往包含有許多的屬性,我們一般都是根據(jù)這些屬性對自定義對象進行比較的。所以Java中要比較對象的大小或者要對對象的集合進行排序,需要通過比較這些對象的某些屬性的大小來確定它們之間的大小關系。

一般,Java中通過接口實現(xiàn)兩個對象的比較,比較常用就是Comparable接口和Comparator接口。首先類要實現(xiàn)接口,并且使用泛型規(guī)定要進行比較的對象所屬的類,然后類實現(xiàn)了接口后,還需要實現(xiàn)接口定義的比較方法(compareTo方法或者compare方法),在這些方法中傳入需要比較大小的另一個對象,通過選定的成員變量與之比較,如果大于則返回1,小于返回-1,相等返回0。

一般簡單的回答可以這么說:

1)首先這兩個接口一般都是用來實現(xiàn)集合內(nèi)的排序,comparable還可以用于兩個對象大小的比較。

2)Comparable接口在java.lang包下面。里面有一個compareTo(T)接口方法。當一個類需要比較的時候,需自行實現(xiàn)Comparable接口的CompareTo方法。當調(diào)用集合排序方法的時候,就會調(diào)用對象的compareTo()方法來實現(xiàn)對象的比較。

3)Comparator接口在java.util包下面。Comparator是一個比較器接口,一般單獨定義一個比較器實現(xiàn)該接口中的比較方法compare();在集合sort方法中傳入對應的比較器實現(xiàn)類。一般使用匿名內(nèi)部類來實現(xiàn)比較器。

4)Comparator相對于Comparable來說更加的靈活,耦合度低。

首先呢,我們可以先了解一下List是如何排序的,我通過寫一個例子來說明;

先寫一個實體類;

public class User { private String name; private Integer age; public static void main(String[] args) { List<User> users=new ArrayList<>(); users.add(new User('yao',19)); users.add(new User('zhang',20)); users.add(new User('li',17)); users.add(new User('xu',15)); users.add(new User('xupeng',15)); users.sort(new UserComparator()); System.out.println(users); } public User(){ } public User(String name, Integer age) { this.name = name; this.age = age; } @Override public String toString() { return 'User{' +'name=’' + name + ’’’ +', age=' + age +’}’; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; }}

再寫一個實現(xiàn)比較器接口的類方法;

/** * 實現(xiàn)比較器接口,并重寫compare方法 */public class UserComparator implements Comparator<User> { @Override public int compare(User o1, User o2) { int age=o1.getAge()- o2.getAge(); return age!=0?age:o1.getName().length()-o2.getName().length(); }}

最后,我們的測試結(jié)果是這樣的,說明成功了;

Java Comparable及Comparator接口區(qū)別詳解

一、Comparable接口

1)什么是Comparable接口:

此接口強行對實現(xiàn)它的每個類的對象進行整體排序。此排序被稱為該類的自然排序 ,類的 compareTo方法被稱為它的自然比較方法 。實現(xiàn)此接口的對象列表(和數(shù)組)可以通過 Collections.sort(和 Arrays.sort )進行自動排序。實現(xiàn)此接口的對象可以用作有序映射表中的鍵或有序集合中的元素,無需指定比較器。

2)實現(xiàn)什么方法:

int compareTo(T o)

比較此對象與指定對象的順序。如果該對象小于、等于或大于指定對象,則分別返回負整數(shù)、零或正整數(shù)。

參數(shù): o - 要比較的對象。

返回:負整數(shù)、零或正整數(shù),根據(jù)此對象是小于、等于還是大于指定對象。

拋出:ClassCastException - 如果指定對象的類型不允許它與此對象進行比較。

3)實例(注:代碼基本上只改動我圈出來的即可測試,其它的照List排序的元代碼使用即可測試出結(jié)果):

當前對象 this與傳入的其他對應的比較方法時;

Java Comparable及Comparator接口區(qū)別詳解

二、Comparator接口

1)實例說明:

Java Comparable及Comparator接口區(qū)別詳解

Comparator接口與Comparable接口不同的是:

①Comparator位于包java.util下,而Comparable位于包java.lang下。

②Comparable接口將比較代碼嵌入需要進行比較的類的自身代碼中,而Comparator接口在一個獨立的類中實現(xiàn)比較。

③comparator接口相對更靈活些,因為它跟接口實現(xiàn)的類是耦合在一起的,可以通過換比較器來換不同的規(guī)則進行比較,即如果前期類的設計沒有考慮到類的Compare問題而沒有實現(xiàn)Comparable接口,后期可

以通過Comparator接口來實現(xiàn)比較算法進行排序,并且為了使用不同的排序標準做準備,比如:升序、降序。

④Comparable接口強制進行自然排序,而Comparator接口不強制進行自然排序,可以指定排序順序。

⑤換一種說法,簡單的說:

Comparable:使user類具有自比較的能力,可以讓自己跟同類型的數(shù)據(jù)做比較;

Comparator:就是一個比較器,像一個第三方,傳入兩個對象,讓比較器去判斷誰大誰小;

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Java
相關文章:
主站蜘蛛池模板: 91av亚洲 | 国产成人精品视频 | 亚洲精品区 | 国产日韩精品视频 | 男人天堂2014| 日韩在线激情 | 天天爱天天干天天操 | 亚洲拍拍拍 | 亚洲va韩国va欧美va | 国产suv精品一区二区6 | 欧美亚洲国产一区二区三区 | 毛茸茸av | 波多野一区二区 | 日韩视频免费在线观看 | 欧美xxxx性xxxxx高清 | 天天天天天天天操 | 成人一区二区三区在线 | 日本美女bbw | 综合激情五月婷婷 | 日韩一区二区三区四区 | 亚洲精品国产欧美在线观看 | 成人小视频在线 | 国产精品乱码久久久久久 | 亚洲精品久久久久久久久久久 | 国产精品入口 | 狠狠干在线观看 | jizz黄色片| 国产免费高清 | 亚洲成人黄色网址 | 在线观看v片| 国产一级18片视频 | 精品尤物| 婷婷五月小说 | 日韩精品视频网 | 四虎精品影院 | 91精品久久香蕉国产线看观看 | 18禁毛片 | 亚洲91久久| 亚洲成av人影院 | 可以在线观看的av网站 | 欧美视频在线一区 |