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

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

java中同類對象之間的compareTo()和compare()方法對比分析

瀏覽:8日期:2022-08-24 15:46:13

首先我們都知道java中的比較都是同一類對象與對象之間的比較,就好像現實生活中比較人和人的年齡一樣,你不會去把人的年齡和人的身高來比較,這顯然是沒有意義的。

java中同類對象之間的比較又分為兩種,基本類型之間的比較和引用類型之間的比較。

java中“==”比較對象是否引用了同一個對象,或者比較基本類型變量值是否相等。Object類的equals()方法用來比較是否一個對象(內存地址比較),可以重寫。

JDK中有些類重寫了equals()方法,只要類型、內容都相同,就認為相等。很變態的Boolean類,僅存在兩個實例。

具體可查看API。一般來說,一個類如果涉及到比較,應該重寫equals()方法,因為內存地址比較沒有意義。

關于上述兩種比較方式可以查看 https://www.jb51.net/article/195717.htm,這里我就不做過多的解釋了

以上兩種所述的方式都是只能比較對象與對象相不相等,但是這顯然是不夠的,我們往往需要的是它們之間的大小比較,當然對于基本類型值大小之間的比較,我們常用的是“>”,“<”等方法,這里我做解釋。

但關于對象與對象之間的大小比較,主要有類實現Comparable接口(重寫compareTo()方法),或提供Comparator接口(重寫compare()方法)。

compareTo()方法

重寫compareTo()方法是實現Comparable接口的使用(自然排序)規則:如果當前對象this大于形參對象obj,則返回正整數,如果當前對象this小于形參對象obj,則返回負整數。如果當前對象this等于形參對象obj,則返回零。

public class Test { public static void main(String[] args) { Student stu1 = new Student('hubert',20); Student stu2 = new Student('jake',18); System.out.println(stu1.compareTo(stu2));//結果為1 }} class Student implements Comparable<Student>{ private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } @Override public int compareTo(Student o) { return this.age<o.age?-1:this.age==o.age?0:1; }}

compare()方法

重寫compare()方法是提供Comparator接口的使用 (定制排序)。重寫compare(Object o1,Object o2)方法,比較o1和o2的大小,如果方法返回正整數,則表示o1大于o2,如果返回0,表示二者相等,如果返回負整數,表示o1小于o2.

引入原因:當元素的類型沒有實現java.lang.Comparable接口而又不方便修改代碼,或者實現了java.lang.Comparable接口的排序規則不適合當前的操作可以考慮使用Comparator的對象來實現排序。

import java.util.Comparator; public class Test { public static void main(String[] args) { Student stu1 = new Student('hubert',20); Student stu2 = new Student('jake',18); int compare = new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getAge() < o2.getAge() ? -1 : o1.getAge() == o2.getAge() ? 0 : 1; } }.compare(stu1, stu2); System.out.println(compare); }} class Student{ private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public int getAge() { return age; } }

Comparator接口有兩個抽象方法,一個是compare,另一個是equals方法,而寫這個匿名內部類時,可以不重寫equals方法,但所有的類都繼承Object,所以可以不實現equals方法

Comparable接口與Comparator接口的使用對比

Comparable接口的方式一旦指定,保證Comparable接口實現類的對象在任何位置都可以比較大小。

Comparator接口屬于臨時性的比較。

以上這篇java中同類對象之間的compareTo()和compare()方法對比分析就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 | 消防泵-XBD单级卧式/立式消防泵-上海塑泉泵阀(集团)有限公司 | 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 | 实验室装修_实验室设计_实验室规划设计- 上海广建净化工程公司 | 河南中专学校|职高|技校招生-河南中职中专网 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 金现代信息产业股份有限公司--数字化解决方案供应商 | 一体式钢筋扫描仪-楼板测厚仪-裂缝检测仪-泰仕特(北京) | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 「阿尔法设计官网」工业设计_产品设计_产品外观设计 深圳工业设计公司 | 缝纫客 | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 | 铝机箱_铝外壳加工_铝外壳厂家_CNC散热器加工-惠州市铂源五金制品有限公司 | 振动筛,震动筛,圆形振动筛,振动筛价格,振动筛厂家-新乡巨宝机电 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 内窥镜-工业内窥镜厂家【上海修远仪器仪表有限公司】 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 北京环球北美考试院【官方网站】|北京托福培训班|北京托福培训 | 熔体泵|换网器|熔体齿轮泵|熔体计量泵厂家-郑州巴特熔体泵有限公司 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 河南不锈钢水箱_地埋水箱_镀锌板水箱_消防水箱厂家-河南联固供水设备有限公司 | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | POS机办理_个人POS机免费领取 - 银联POS机申请首页 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 机床主轴维修|刀塔维修|C轴维修-常州翔高精密机械有限公司 | 电竞学校_电子竞技培训学校学院-梦竞未来电竞学校官网 | 知网论文检测系统入口_论文查重免费查重_中国知网论文查询_学术不端检测系统 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 气动隔膜阀_气动隔膜阀厂家_卫生级隔膜阀价格_浙江浙控阀门有限公司 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 洛阳网站建设_洛阳网站优化_网站建设平台_洛阳香河网络科技有限公司 | 宠物店加盟_宠物连锁店_开宠物店-【派多格宠物】 | 大米加工设备|大米加工机械|碾米成套设备|大米加工成套设备-河南成立粮油机械有限公司 | DWS物流设备_扫码称重量方一体机_快递包裹分拣机_广东高臻智能装备有限公司 |