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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Collections.sort()泛型集合排序的使用,和自定义类实现Comparable<T>接口重写compareTo(T o)方法完成Collections.sort()排序,以及自定义排序规则

發布時間:2024/10/8 编程问答 41 豆豆

Collections算法類

????????1.Collections類是Java提供的一個集合操作工具類。

????????2.Collections類定義了一系列用于操作集合的靜態方法,用于實現對集合元素的排序、查找和替換等操作。

????????3.Collections和Collection是不同的,前者是集合的操作類,后者是集合接口

Collections的常用靜態方法(不是所有的方法)

? ? ? ? 1.sort(集合對象):排序

????????2.binarySearch(集合對象):折半查找——返回查找對象下標位置

????????3.max(集合對象) \ min(集合對象):查找最大\最小值——返回查找到的對象

Collections排序

? ? ? ? 1.實現一個類的對象之間比較大小,該類要實現Comparable<T>接口(T為通配符,匹配一個類型,實現該接口需要傳入實現類作為泛型約束

? ? ? ? 2.重寫?Comparable<T>接口?public int compareTo(T o)方法?

? ? ? ? 3.實現方法返回值約定:如果該對象小于、等于或大于指定對象,則分別返回負整數、零或正整數

Collections排序案例:

????????學生類Student實現了Comparable<Student>接口,重寫 compareTo(Student o)方法,通過比較學號實現對象之間的大小比較。

注意

????????1. 使用Collections.sort(集合對象)排序時,如果集合中存的是Java自帶的類型的數據,如Integer,則不需要該類型內實現Comparable<T>接口(閱讀源碼可發現其內部已自動實現接口重寫方法),如果是自定義類型,如num類,Student類,則需要實現Comparable<T>并重寫 public int compareTo(T o)方法。

????????2.調用Collections.max和min不需要先排序,但是如果使用折半查找則必須先Collections.sort(集合對象)排序,不然折半查找不論是否存在都返回-1;

? ? ? ? 3.實現compareTo(T o)方法,我們只要根據要求,對傳入參數的相關數值進行判斷比較,并返回相應的負整數零或者正整數即可,不需要關心比大小的具體實現,因為調用Collections.sort()方法后,其工具類會有相應的方法調用我們重寫好的compareTo(T o)方法來使用。

實際操作

public class Test {public static void main(String[] args) {//創建集合并添加值List list = new ArrayList();list.add(new num(3));list.add(new num(2));list.add(new num(1));//調用排序方法Collections.sort(list);//輸出排序后結果for (Object o: list) {System.out.println(((num)o).getNum());}System.out.println();//輸出最大最小值System.out.println(((num)Collections.max(list)).getNum());System.out.println(((num)Collections.min(list)).getNum());System.out.println();//輸出一個類型的在集合中的下標位置System.out.println((Collections.binarySearch(list,new num(1))));System.out.println();} }class num implements Comparable<num>{private int num;public num(int num) {this.num = num;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}/** 重寫的compareTo(num o)方法* 如果該對象小于、等于或大于指定對象,則分別返回負整數、零或正整數。* 該對象:this,調用次方法的對象* 指定對象:參數傳進來的對象* */@Overridepublic int compareTo(num o) {return this.num>o.num?1:this.num==o.num?0:-1;} }

運行后效果,先排序后遍歷輸出,后輸出最大最小值,再輸出一個指定對象所在集合的下標

?自定義排序規則

以此案例為例子解釋?

? ? ? ? 如果我們不想比學生的學號大小,假如現在要求按照學生成績排序,那我們就根據成績排序來做一個成績排行榜,只需要在 compareTo 方法中把比較的參數換一下就行,比如原本是調用num這個屬性,換成 this.age 和 參數對象.age 比較即可。

(此工具類有一個很好地特性,如果比較成績,兩個成績相同,則會比較與之相鄰的下一個數值型的值,判斷大小來以此排列)


偏實用派的人推薦直接看這篇文章,言簡意賅:Collections comparable_Azadoo的博客-CSDN博客

總結

以上是生活随笔為你收集整理的Collections.sort()泛型集合排序的使用,和自定义类实现Comparable<T>接口重写compareTo(T o)方法完成Collections.sort()排序,以及自定义排序规则的全部內容,希望文章能夠幫你解決所遇到的問題。

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