电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

Java Comparable及Comparator接口區別詳解

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

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

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

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

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

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

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

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

再寫一個實現比較器接口的類方法;

/** * 實現比較器接口,并重寫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(); }}

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

Java Comparable及Comparator接口區別詳解

一、Comparable接口

1)什么是Comparable接口:

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

2)實現什么方法:

int compareTo(T o)

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

參數: o - 要比較的對象。

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

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

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

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

Java Comparable及Comparator接口區別詳解

二、Comparator接口

1)實例說明:

Java Comparable及Comparator接口區別詳解

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

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

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

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

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

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

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

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

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

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

標簽: Java
相關文章:
主站蜘蛛池模板: 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 小型UV打印机-UV平板打印机-大型uv打印机-UV打印机源头厂家 |松普集团 | 阴离子聚丙烯酰胺价格_PAM_高分子聚丙烯酰胺厂家-河南泰航净水材料有限公司 | HDPE储罐_厂家-山东九州阿丽贝防腐设备 | 四川实木门_成都实木门 - 蓬溪聚成门业有限公司 | OpenI 启智 新一代人工智能开源开放平台| 直流电能表-充电桩电能表-导轨式电能表-智能电能表-浙江科为电气有限公司 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 济南冷库安装-山东冷库设计|建造|冷库维修-山东齐雪制冷设备有限公司 | 船用锚链|专业锚链生产厂家|安徽亚太锚链制造有限公司 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | 护栏打桩机-打桩机厂家-恒新重工 | 心肺复苏模拟人|医学模型|急救护理模型|医学教学模型上海康人医学仪器设备有限公司 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 厌氧工作站-通用型厌氧工作站-上海胜秋科学仪器有限公司 | 最新电影-好看的电视剧大全-朝夕电影网 | 耐腐蚀泵,耐腐蚀真空泵,玻璃钢真空泵-淄博华舜耐腐蚀真空泵有限公司 | ★塑料拖链__工程拖链__电缆拖链__钢制拖链 - 【上海闵彬】 | 深圳标识制作公司-标识标牌厂家-深圳广告标识制作-玟璟广告-深圳市玟璟广告有限公司 | 济南保安公司加盟挂靠-亮剑国际安保服务集团总部-山东保安公司|济南保安培训学校 | 南方珠江-南方一线电缆-南方珠江科技电缆-南方珠江科技有限公司 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 低气压试验箱_高低温低气压试验箱_低气压实验箱 |林频试验设备品牌 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | MVR蒸发器厂家-多效蒸发器-工业废水蒸发器厂家-康景辉集团官网 | 沈阳液压泵_沈阳液压阀_沈阳液压站-沈阳海德太科液压设备有限公司 | 数字展示在线_数字展示行业门户网站 | 吊篮式|移动式冷热冲击试验箱-二槽冷热冲击试验箱-广东科宝 | 山东风淋室_201/304不锈钢风淋室净化设备厂家-盛之源风淋室厂家 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 山东钢衬塑罐_管道_反应釜厂家-淄博富邦滚塑防腐设备科技有限公司 | 广东成考网-广东成人高考网| 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 别墅图纸超市|别墅设计图纸|农村房屋设计图|农村自建房|别墅设计图纸及效果图大全 | 北京发电车出租-发电机租赁公司-柴油发电机厂家 - 北京明旺盛安机电设备有限公司 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 |