Java实现Comparable接口(重写compareTo方法)和Comparator接口(重写compare方法)

您所在的位置:网站首页 comparison写作方法 Java实现Comparable接口(重写compareTo方法)和Comparator接口(重写compare方法)

Java实现Comparable接口(重写compareTo方法)和Comparator接口(重写compare方法)

2024-07-15 20:59:27| 来源: 网络整理| 查看: 265

Compareable接口和Comparator接口

实体类: java.lang.Comparable(接口)+compareTo(重写方法) 业务类:java.util.Comparator(接口) +compare(重写方法)

两个接口分别对应的业务实现

在实际的需求中,我们根据对象的各种属性(标题,时间,点击率,销售额。。。)进行排序(升序,降序),可以做哎数据库的sql上进行处理,但是不是每一个场景都适合在sql上进行处理,我们有时候需要在程序根据不同的属性,对一个对象进行各种排序通过页面呈现给用户。

一、Comparable接口+compareTo方法 的应用场景

下面有这样的一个需求,一种商品(商品名,销售量,生产日期),根据生产日期降序 销售量升序 商品名称降序

思路:首先按照日期降序,如果日期相同 按照销售量升序,如果销售量相同,按周商品的名称降序。

创建类实现Comparable接口(注意有泛型),重写compareTo方法 /** * 商品po类 */ public class Items implements java.lang.Comparable { private String title; private int hits; private Date pubTime; public Items() {} public Items(String title, int hits, Date pubTime) { super(); this.title = title; this.hits = hits; this.pubTime = pubTime; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getHits() { return hits; } public void setHits(int hits) { this.hits = hits; } public Date getPubTime() { return pubTime; } public void setPubTime(Date pubTime) { this.pubTime = pubTime; } //时间降序 点击量升序 标题降序 @Override public int compareTo(Items o) { int result = 0; //按照生产时间降序 result = - this.pubTime.compareTo(o.pubTime); if(0==result){//如果生产时间相同 就按照销售量升序排列 result = this.hits-o.hits; if(0==result){//如果销售量相同 按照名字降序排列 result = - this.title.compareTo(o.title); } } return result; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("商品名称").append(this.title); sb.append("销售量").append(this.hits); sb.append("生产时间").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.pubTime)).append("\n"); return sb.toString(); } } 造数据,进行比较 注意:最后排序还是要调用Collenctions.sort(item) 方法进行排序 //时间降序, 销售量升序, 标题降序 public static void main(String[] args) { List item = new ArrayList(); item.add(new Items("abcitems" ,30,new Date(System.currentTimeMillis()-1000*60*60))); item.add(new Items("abcfgitems" ,30,new Date(System.currentTimeMillis()-1000*60*50))); item.add(new Items("abcditems" ,100,new Date())); item.add(new Items("abefNews" ,50,new Date(System.currentTimeMillis()-1000*60*60))); System.out.println("----------排序前----------"); System.out.println(item); System.out.println("----------排序后----------"); Collections.sort(item); System.out.println(item); } 二,Comparator接口 + compare方法 的应用场景

一般比较字符串是按照unicode的大小进行排序的,但是我需要按照字符串的长度进行排序,下面是实现的案例: 首先,定义比较的业务规则

/** * 定义业务的比较规则,我需要按照字符串的长度进行比较(在实际的场景中,可以根据业务的需求,灵活的改变比较规则,实现排序) */ public class CompareString implements java.util.Comparator { @Override public int compare(String o1, String o2) { int len1 = o1.length(); int len2 = o2.length(); return -(len1-len2);//需要按照降序排列 } }

比较字符串的长度,按照降序排列 注意:最后排序还是调用Collections.sort(list, new CompareString()方法

public static void main(String[] args) { List list = new ArrayList(); list.add("abc"); list.add("abcd"); list.add("ab"); list.add("abd"); Collections.sort(list,new CompareString()); System.out.println(list); //[abcd, abc, abd, ab] } 三、对比 comparable接口是默认嵌套在实现类里面,当我们调用Collections.sort(list)方法会自动调用重写的compareTo方法。comparator接口是类似工具类,提前在外面定义一个工具类实现comparator接口,并重写compare方法。当我们需要排序时,调用该工具类,通过 Collections.sort(list, 工具类对象)的方式调用。


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭