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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Comparable和Comparator区别是什么?差点吃屎

發(fā)布時間:2024/9/27 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Comparable和Comparator区别是什么?差点吃屎 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

夫陶公清風千古,余又何人,敢稱庶幾


📖介紹

💡 先抽支煙(建議抽5塊錢一包的,省點錢買皮膚)!我先查下這兩個單詞是什么意思(英語不好,六級考了3次,至今未過)




💡 從上面兩張白白胖胖的圖片中我們可以發(fā)現(xiàn),這兩個單詞都有比較的意思,只是前者是形容詞,后者是名詞(我TM說這些有用嗎!滾😠)。

接下來,讓我們團起場子,翹起二郎腿😀好好研究下這兩個性感的單詞有什么異同點:

🍎相同點:

  • 都是用來比較對象的

🍉不同點

  • Comparable在java.lang 包下

  • Comparator在java.util 包下

  • Comparator通常用于對象之間排序,Java Api提供的Collections和Arrays中的sort方法可以接受一個Comparator對象,從而實現(xiàn)排序

  • Comparator可以在不修改類的情況下實現(xiàn)多種情況的比較,比如我們需要比較一個學生,我們可以通過年齡比較,也可以通過體重和身高比較(其實還闊以通過性感值比較😄),而Comparable接口就??不闊以,只能通過自身對象與其他對象比較,還是看看源碼吧:

public interface Comparator<T> {int compare(T o1, T o2); } public interface Comparable<T> {public int compareTo(T o); }

??咦?啥玩意兒!我發(fā)現(xiàn)了一個秘密,compare和compareTo長得不一樣,前面那個好短,后面那個好長,compare里面可以放兩個蛋,而compareTo只能放一個蛋(說這些有用嗎,操!),通過我九九八十一級英語水平,我得知,compare是比較的意思;compareTo是與...比較的意思(我與你比較總是不同,性感值不一樣)。

💻Comparable

要使用Comparable這玩意兒,我們需要定義一個類去實現(xiàn)(implements)它,并且重寫(@Override)compareTo方法,該類一旦實現(xiàn)了Comparable接口就可以使用自身對象和其他對象進行比較了,Comparable相當于自己干自己,聽起來好像有點兒意思(我差點就睡著了),現(xiàn)在我們來做個案例:

??

public class Student implements Comparable<Student> {private int id;private String name;private int age;public Student(int age) {this.age = age;}// 省略get set方法@Overridepublic int compareTo(Student o) {if (this.getAge() > o.getAge()) {return 1;}if (this.getAge() < o.getAge()) {return -1;}return 0;}}

??測試:

public class ComparableTest {public static void main(String[] args) {Student stu1 = new Student(22);Student stu2 = new Student(30);int test = stu1.compareTo(stu2);if (test > 0) {System.out.println("對象1大于對象2");} else if (test < 0) {System.out.println("對象1小于對象2");} else {System.out.println("對象相等");}} }

🎨

對象1小于對象2

??上面代碼明顯暴露出了俺上面所說的Comparable不可以進行多種類型的比較; 有時我們需要通過年齡,有時需要通過身高(不過你也可以通過性感值)去比較一個人,如果要換一種方式比較就要修改Student類,這顯然不可取的。

💻Comparator

我們可以使用Comparator去解決Comparable的缺點,可以按照不同的情況進行比較。 讓我們看一下在web開發(fā)中的實際應用吧(我猜的,希望有高人指點):


從這張秀氣的圖片中,我們可以看到表單中列表有很多字段(比如用戶ID、登錄名稱、部門…),這些字段都屬于User實體,我們可以通過登錄名稱排序,也可以通過創(chuàng)建時間排序。 好像越來越有意思了!

??實體類:

public class Student {private long id;private int age;private String name;public Student(long id, String name, int age) {this.id = id;this.name = name;this.age = age;}// 省略get、set和重寫toString方法}

??年齡比較器:

public class AgeComparator implements Comparator<Student> {@Overridepublic int compare(Student o1, Student o2) {if (o1.getAge() > o2.getAge()) {return 1;} else if (o1.getAge() < o2.getAge()) {return -1;}return 0;} }

??測試:

public class ComparatorTest {public static void main(String[] args) {Student stu1 = new Student(20180101, "zwj", 20);Student stu2 = new Student(20180106, "dgqb", 16);Student stu3 = new Student(20180102, "zxxz", 75);Student stu4 = new Student(20180111, "hqg", 36);Student stu5 = new Student(20180121, "xyw", 18);ArrayList<Student> list = new ArrayList<>();list.add(stu1);list.add(stu2);list.add(stu3);list.add(stu4);list.add(stu5);Collections.sort(list, new AgeComparator()); //排序list.forEach(stu -> System.out.println(stu)); //打印} }

🎨

{ id='20180106', age='16', name='dgqb'} { id='20180121', age='18', name='xyw'} { id='20180101', age='20', name='zwj'} { id='20180111', age='36', name='hqg'} { id='20180102', age='75', name='zxxz'}

通過使用年齡比較器(AgeComparator ),可以看到對象通過年齡從小到大排序,你也可以寫一個ID比較器(IdComparator )(按照ID大小比較)等等,總之你想怎么干就怎么干。

通過上面學習,我們大概也了解了這兩個接口的區(qū)別和使用,只是簡單入門,要深入還得深入去學習!!!

建議去看Java API文檔 :Comparable 、Comparator


總結

以上是生活随笔為你收集整理的Comparable和Comparator区别是什么?差点吃屎的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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