日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法

發(fā)布時(shí)間:2023/12/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文地址https://segmentfault.com/a/1190000005738975

?

實(shí)體類(lèi):java.lang.Comparable(接口) + comareTo(重寫(xiě)方法),業(yè)務(wù)排序類(lèi) java.util.Comparator(接口) + compare(重寫(xiě)方法).

這兩個(gè)接口我們非常的熟悉,但是 在用的時(shí)候會(huì)有一些不知道怎么下手的感覺(jué),現(xiàn)在用案例進(jìn)行總結(jié),消除對(duì)這個(gè)知識(shí)點(diǎn)的理解盲區(qū)(個(gè)人的理解,如果有錯(cuò)誤 請(qǐng)多多指教)。
一,在實(shí)際的需求中,我們需要根據(jù)對(duì)象的各種屬性(標(biāo)題,時(shí)間,點(diǎn)擊率,銷(xiāo)售額...)進(jìn)行排序(升序,降序),可以在數(shù)據(jù)庫(kù)的sql上進(jìn)行處理,但是 不是每一個(gè)場(chǎng)景 都適合在sql上進(jìn)行處理,我們有時(shí)候需要在程序根據(jù)不同的屬性,對(duì)一個(gè)對(duì)象進(jìn)行各種排序 通過(guò)頁(yè)面呈現(xiàn)給用戶。
下面有這樣的一個(gè)需求,一種商品(商品名,銷(xiāo)售量,生產(chǎn)日期),根據(jù)生產(chǎn)日期降序 銷(xiāo)售量升序 商品名稱(chēng)降序

思路:首先按照日期降序,如果日期相同 按照銷(xiāo)售量升序,如果銷(xiāo)售量相同,按周商品的名稱(chēng)降序
1,創(chuàng)建需要比較的對(duì)象的java bean
創(chuàng)建 Bean的快捷鍵:
1),帶參數(shù)的構(gòu)造器:// Shift + Alt + S -->O
2),不帶參數(shù)的構(gòu)造器: //Alt + / 生成空的構(gòu)造方法
3),生成 get set方法:// Shift + Alt + S --> R + Table + Enter + Shift +Table -->Enter

/*** 商品po類(lèi)*/ public class Items implements java.lang.Comparable<Items> {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;}//時(shí)間降序 點(diǎn)擊量升序 標(biāo)題降序 @Overridepublic int compareTo(Items o) {int result = 0;//按照生產(chǎn)時(shí)間降序result = - this.pubTime.compareTo(o.pubTime);if(0==result){//如果生產(chǎn)時(shí)間相同 就按照銷(xiāo)售量升序排列result = this.hits-o.hits;if(0==result){//如果銷(xiāo)售量相同 按照名字降序排列result = - this.title.compareTo(o.title);}}return result;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append("商品名稱(chēng)").append(this.title);sb.append("銷(xiāo)售量").append(this.hits);sb.append("生產(chǎn)時(shí)間").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.pubTime)).append("\n");return sb.toString();}}

?

2,造數(shù)據(jù),比較

//時(shí)間降序, 銷(xiāo)售量升序, 標(biāo)題降序 public static void main(String[] args) {List<Items> item = new ArrayList<Items>();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的應(yīng)用場(chǎng)景
一般比較字符串是按照unicode的大小進(jìn)行排序的,但是我需要按照字符串的長(zhǎng)度進(jìn)行排序,下面是實(shí)現(xiàn)的案例:
首先,定義比較的業(yè)務(wù)規(guī)則

/*** 定義業(yè)務(wù)的比較規(guī)則,我需要按照字符串的長(zhǎng)度進(jìn)行比較(在實(shí)際的場(chǎng)景中,可以根據(jù)業(yè)務(wù)的需求,靈活的改變比較規(guī)則,實(shí)現(xiàn)排序)*/ public class CompareString implements java.util.Comparator<String> {@Overridepublic int compare(String o1, String o2) {int len1 = o1.length();int len2 = o2.length();return -(len1-len2);//需要按照降序排列 } }

?

比較 字符串的長(zhǎng)度,按照 降序排列

public static void main(String[] args) {List<String> list = new ArrayList<String>();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]}

?

比如 商品,我需要按照價(jià)格的降序排列,代碼如下:
商品 po類(lèi)

/*** 商品po類(lèi)*/ public class Products {private String title;private int price;public Products() {}public Products(String title, int price) {super();this.title = title;this.price = price;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}@Overridepublic String toString() {return "title=" + title+",price=" + price +"\n";} }

?

定義比較規(guī)則:

/*** 按照價(jià)格的降序排列*/public class ProductCompare implements java.util.Comparator<Products> {@Overridepublic int compare(Products o1, Products o2) {return -( o1.getPrice()-o2.getPrice()>0?1: (o1.getPrice()==o2.getPrice()?0:-1));}}

?

數(shù)據(jù)比較:

public static void main(String[] args) {List<Products> product = new ArrayList<Products>();product.add(new Products("a",120));product.add(new Products("b",143432));product.add(new Products("c",1892));product.add(new Products("d",11092));Collections.sort(product,new ProductCompare());System.out.println(product);結(jié)果:[title=b,price=143432title=d,price=11092title=c,price=1892title=a,price=120]}

?

轉(zhuǎn)載于:https://www.cnblogs.com/111testing/p/9158140.html

總結(jié)

以上是生活随笔為你收集整理的java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲一级片免费 | 最污网站在线观看 | 亚洲综合图片一区 | 九九热这里有精品视频 | 视频在线看| 国产一区二区三区福利 | 国产激情无码一区二区 | 亚洲欧美综合另类自拍 | 久久99久久久 | av一区二区不卡 | 永久在线 | 视频区小说区 | 日本aa大片 | 无人在线观看的免费高清视频 | 久久久精品国产免费爽爽爽 | 久久精品免费在线 | 成人国产免费观看 | 潘金莲激情呻吟欲求不满视频 | 波多野结衣三级视频 | 1000部av| 成人精品 | 三级a视频 | 天躁夜夜躁狼狠躁 | 欧美三根一起进三p | 国产三级午夜理伦三级 | 热热色原网址 | 一本一道久久a久久精品综合 | 91av国产视频| 欧美极品少妇 | 久久影院中文字幕 | 涩涩涩在线观看 | aaaaaabbbbbb毛片 | 久久人爽 | 欧美亚洲91 | 国产在线一级 | www.日批 | 久久久激情 | 射一射| 男女无遮挡做爰猛烈视频 | av影视在线观看 | 日韩久久精品一区二区 | 九一精品视频 | 天天操你 | 欧美特级毛片 | 欧美老肥妇做爰bbww | 欧美性教育视频 | 日本三级吹潮 | 欧美高清久久 | 久久理论 | 16—17女人毛片 | 国产a久久 | 亚洲成a人v欧美综合天堂麻豆 | 亚洲精品66| 蜜臀av一区 | 一区二区三区日韩 | 欧美精品一区二区三区在线播放 | 亚洲高清毛片 | 中国黄色一级毛片 | 人妖粗暴刺激videos呻吟 | 人人干人人看 | 动漫精品一区 | 精品国产一区二区三区性色 | 国产又粗又长又大视频 | 欧美日韩电影一区二区三区 | 精品人妻一区二区三区视频 | 高中男男gay互囗交观看 | 国产一精品一aⅴ一免费 | 第四色激情 | 色婷婷综合久久久久中文字幕 | 怒海潜沙秦岭神树 | 欧美熟妇另类久久久久久不卡 | 国产精品亚洲αv天堂无码 伊人性视频 | 亚洲熟妇无码久久精品 | 午夜神马福利 | 国产一卡二| 亚洲网在线观看 | 国产女优在线播放 | 夜夜爽爽| 久久av秘一区二区三区 | 日b在线观看 | 免费激情网址 | 成人片在线视频 | 真实偷拍激情啪啪对白 | 男人天堂2019 | 国产精品国产精品 | 美女被艹视频网站 | 国产成人一区二区三区 | 女人下边被添全过视频 | av老司机福利 | 成人宗合 | 精品91视频 | 8x8ⅹ成人永久免费视频 | 一区二区三区国产 | 在线观看中文字幕第一页 | 又大又长粗又爽又黄少妇视频 | 天天艹 | 亚洲午夜av久久乱码 | 久久男人视频 | 91漂亮少妇露脸在线播放 |