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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 中 Comparable 接口的意义和用法.

發布時間:2025/3/20 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 中 Comparable 接口的意义和用法. 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在之前的博文中已經介紹了Java中Collection 接口和 Collections類.

http://blog.csdn.net/nvd11/article/details/21516075




一, 為何需要實現Comparable接口

我們知道Collections類中包含很多對實現Collection接口的容器各種操作的靜態方法.

當然, 其中最長用的莫過于排序了(Collections.sort(List l).


下面是1個簡單例子:

public class Compare1{public static void f(){ArrayList arr = new ArrayList();arr.add(10);arr.add(23);arr.add(7);System.out.println(arr);Collections.sort(arr);System.out.println(arr);} }
邏輯很簡單, 就是在1個list容器中添加3個int數值(注意實際被自動裝箱成Interger對象).

正常輸出容器元素一次, 利用Collections.sort()方法排序后, 再輸出1次.


輸出:

[java] [10, 23, 7][java] [7, 10, 23]

但是當List容器添加的元素對象是屬于自己寫的類時, 就可能出問題了.

例子:

import java.util.ArrayList; import java.util.Collections;class Student{private String name;private int ranking;public Student(String name, int ranking){this.name = name;this.ranking = ranking;} public String toString(){return this.name + ":" + this.ranking;} }public class Compare2{public static void f(){ArrayList arr = new ArrayList();arr.add(new Student("Jack",10));arr.add(new Student("Bill",23));arr.add(new Student("Rudy",7));System.out.println(arr);} }


上面定義了1個Student類, 它只有兩個成員, 名字和排名.

在f()方法內, 添加3個Student的對象到1個list容器中, 然后輸出(必須重寫String方法, 這里不解釋了):

[java] [Jack:10, Bill:23, Rudy:7]

到此為止, 是沒有問題的. ?但是當我對這個容器進行排序時就有問題了.

例如將上面的f()方法改成:

public class Compare2{public static void f(){ArrayList arr = new ArrayList();arr.add(new Student("Jack",10));arr.add(new Student("Bill",23));arr.add(new Student("Rudy",7));System.out.println(arr);Collections.sort(arr);System.out.println(arr);} }
編譯時就會出錯:

[java] Caused by: java.lang.ClassCastException: Collection_kng.Comparable_kng.Student cannot be cast to java.lang.Comparable
提示這個類Student沒有實現Comparable接口.

原因也很簡單, 因為Java不知道應該怎樣為Student對象排序, 是應該按名字排序? 還是按ranking來排序?


為什么本文第1個例子就排序成功? 是因為Java本身提供的類Integer已經實現了Comparable接口. 也表明Integer這個類的對象是可以比較的.


而Student類的對象默認是不可以比較的. ?除非它實現了Comparable接口.


總而言之, ?如果你想1個類的對象支持比較(排序), 就必須實現Comparable接口.


二, Comparable接口簡介.

Comparable 接口內部只有1個要重寫的關鍵的方法.

就是

int compareTo(T o)

這個方法返回1個Int數值, ?

例如 i = x.compareTo(y)

如果i=0, 也表明對象x與y排位上是相等的(并非意味x.equals(y) = true, 但是jdk api上強烈建議這樣處理)

如果返回數值i>0 則意味者, x > y啦, 

反之若i<0則 意味x < y


三, Comparable接口的實現及用法.

用回上面的例子, 我們修改Student類, 令其實現Comparable接口并重寫compareTo方法.

import java.util.ArrayList; import java.util.Collections;class Student implements Comparable{private String name;private int ranking;public Student(String name, int ranking){this.name = name;this.ranking = ranking;} public String toString(){return this.name + ":" + this.ranking;}public int compareTo(Object o){Student s = (Student)(o);return this.ranking - s.ranking;} }public class Compare2{public static void f(){ArrayList arr = new ArrayList();arr.add(new Student("Jack",10));arr.add(new Student("Bill",23));arr.add(new Student("Rudy",7));System.out.println(arr);Collections.sort(arr);System.out.println(arr);} }

注意重寫的compareTo(Object o)方法內. ?根據Student的ranking成員來比較的, 也就是說跟姓名無關了.


這時再編譯執行, 就能見到List容器內的Student對象已經根據ranking來排序了.?

輸出:

[java] [Jack:10, Bill:23, Rudy:7] [java] [Rudy:7, Jack:10, Bill:23]












總結

以上是生活随笔為你收集整理的Java 中 Comparable 接口的意义和用法.的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美sm视频 | 日日摸日日添日日碰9学生露脸 | 91av国产视频 | 豆花在线视频 | 成人污网站 | 日本一区二区三区中文字幕 | 精品久久久久久久免费人妻 | 一级视频毛片 | 男女做爰猛烈刺激 | 一级性生活免费视频 | 1000部啪啪未满十八勿入 | 亚洲综合在线中文字幕 | 好吊色免费视频 | 99色影院| 中国女人内96xxxxx | 奇米网7777 | 华丽的外出在线观看 | 欧美一区二区三区久久综合 | 久久久久在线观看 | a级片在线看 | 欧美三级午夜理伦三级小说 | 国产女人18毛片水真多18精品 | 日韩午夜在线播放 | 国产精品黄在线观看 | 谁有av网址 | 国产热热 | 色8久久| 黄色录像三级 | 亚洲精品污一区二区三区 | 国产黄a三级| 午夜在线观看视频网站 | 张柏芝54张无删码视频 | 日本大尺度吃奶做爰久久久绯色 | 日本成人性爱 | 免费成人美女女电影 | 亚洲视频网址 | 夜夜嗨aⅴ一区二区三区 | 在线免费亚洲 | 午夜久久久久久久久久影院 | 91美女视频在线观看 | 久久久精品免费看 | av综合久久 | 91精品国产乱码久久久久 | 熟女av一区二区 | 亚洲精品国产精品乱码不99按摩 | 日韩一级精品 | 另类第一页 | 国产艳情片 | 狼人综合av | 国产日韩欧美日韩大片 | 在线一区二区视频 | 夜夜摸视频网 | 小早川怜子久久精品中文字幕 | 男人的天堂国产 | 国产精品1 | 日本肉体xxxx裸体137大胆图 | 日韩精品免费一区二区三区竹菊 | 日韩精品免费在线观看 | 国内激情 | 91呦呦 | 一区二区三区在线播放 | 精品字幕 | 色妞色视频一区二区三区四区 | 97精品久久人人爽人人爽 | 黄色片地址| 亚洲国产一区二区a毛片 | 激情成人综合网 | 免费爱爱网站 | 亚洲熟妇无码一区二区三区 | 欧美a∨ | 无人在线观看的免费高清视频 | 四虎影院在线视频 | 久久久久成人片免费观看蜜芽 | 成人久久精品人妻一区二区三区 | 91在线免费看 | 豆花av| 啪啪啪毛片 | 久久大 | 亚洲国产一区视频 | 日韩a在线 | 国产夜色视频 | 一级片免费网址 | 国产亚洲在线观看 | www.色图 | 人妻少妇偷人精品久久性色 | 五十路japanese55丰满 | 日韩精品在线免费视频 | 蜜桃传媒一区二区亚洲av | 亚洲综合第一区 | 欧美成年人在线观看 | 天躁夜夜躁狼狠躁 | 亚洲色成人一区二区三区小说 | 91综合精品 | jizz成人 | 性激情视频 | 靠逼在线观看 | 天天看视频 | 九九久久国产视频 | 91豆花视频|