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

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

生活随笔

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

编程问答

Collections集合工具类的方法_sort(List,Comparator)

發(fā)布時(shí)間:2024/4/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Collections集合工具类的方法_sort(List,Comparator) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)述Comparable和Comparator兩個(gè)接口的區(qū)別。

Comparable:強(qiáng)行對(duì)實(shí)現(xiàn)它的每個(gè)類(lèi)的對(duì)象進(jìn)行整體排序。這種排序被稱(chēng)為類(lèi)的自然排序,類(lèi)的compareTo方法被稱(chēng)為它的自然比較方法。只能在類(lèi)中實(shí)現(xiàn)compareTo()一次,不能經(jīng)常修改類(lèi)的代碼實(shí)現(xiàn)自己想要的排序。實(shí)現(xiàn)此接口的對(duì)象列表(和數(shù)組)可以通過(guò)Collections.sort(和Arrays.sort)進(jìn)行自動(dòng)排序,對(duì)象可以用作有序映射中的鍵或有序集合中的元素,無(wú)需指定比較器。

Comparator強(qiáng)行對(duì)某個(gè)對(duì)象進(jìn)行整體排序。可以將Comparator 傳遞給sort方法(如Collections.sort或 Arrays.sort),從而允許在排序順序上實(shí)現(xiàn)精確控制。還可以使用Comparator來(lái)控制某些數(shù)據(jù)結(jié)構(gòu)(如有序set或有序映射)的順序,或者為那些沒(méi)有自然順序的對(duì)象collection提供排序。

練習(xí)

創(chuàng)建一個(gè)學(xué)生類(lèi),存儲(chǔ)到ArrayList集合中完成指定排序操作。

Student 初始類(lèi)

package com.learn.demo05.Collections;public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;} }

測(cè)試類(lèi):

public class Demo {public static void main(String[] args) {// 創(chuàng)建四個(gè)學(xué)生對(duì)象 存儲(chǔ)到集合中ArrayList<Student> list = new ArrayList<Student>();list.add(new Student("rose",18));list.add(new Student("jack",16));list.add(new Student("abc",16));list.add(new Student("ace",17));list.add(new Student("mark",16));/*讓學(xué)生 按照年齡排序 升序*/ // Collections.sort(list);//要求 該list中元素類(lèi)型 必須實(shí)現(xiàn)比較器Comparable接口for (Student student : list) {System.out.println(student);}} }

發(fā)現(xiàn),當(dāng)我們調(diào)用Collections.sort()方法的時(shí)候 程序報(bào)錯(cuò)了。

原因:如果想要集合中的元素完成排序,那么必須要實(shí)現(xiàn)比較器Comparable接口。

于是我們就完成了Student類(lèi)的一個(gè)實(shí)現(xiàn),如下:

public class Student implements Comparable<Student>{....@Overridepublic int compareTo(Student o) {return this.age-o.age;//升序} }

再次測(cè)試,代碼就OK 了效果如下:

Student{name='jack', age=16} Student{name='abc', age=16} Student{name='mark', age=16} Student{name='ace', age=17} Student{name='rose', age=18}

擴(kuò)展

如果在使用的時(shí)候,想要獨(dú)立的定義規(guī)則去使用 可以采用Collections.sort(List list,Comparetor<T> c)方式,自己定義規(guī)則:

Collections.sort(list, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return o2.getAge()-o1.getAge();//以學(xué)生的年齡降序} });

效果:

Student{name='rose', age=18} Student{name='ace', age=17} Student{name='jack', age=16} Student{name='abc', age=16} Student{name='mark', age=16}

如果想要規(guī)則更多一些,可以參考下面代碼:

Collections.sort(list, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {// 年齡降序int result = o2.getAge()-o1.getAge();//年齡降序if(result==0){//第一個(gè)規(guī)則判斷完了 下一個(gè)規(guī)則 姓名的首字母 升序result = o1.getName().charAt(0)-o2.getName().charAt(0);}return result;}});

效果如下:

Student{name='rose', age=18} Student{name='ace', age=17} Student{name='abc', age=16} Student{name='jack', age=16} Student{name='mark', age=16} package com.learn.demo05.Collections;import java.util.ArrayList; import java.util.Collections; import java.util.Comparator;/*- java.utils.Collections是集合工具類(lèi),用來(lái)對(duì)集合進(jìn)行操作。部分方法如下:public static <T> void sort(List<T> list,Comparator<? super T> ):將集合中元素按照指定規(guī)則排序。Comparator和Comparable的區(qū)別Comparable:自己(this)和別人(參數(shù))比較,自己需要實(shí)現(xiàn)Comparable接口,重寫(xiě)比較的規(guī)則compareTo方法Comparator:相當(dāng)于找一個(gè)第三方的裁判,比較兩個(gè)Comparator的排序規(guī)則:o1-o2:升序*/ public class Demo03Sort {public static void main(String[] args) {ArrayList<Integer> list01 = new ArrayList<>();list01.add(1);list01.add(3);list01.add(2);System.out.println(list01);//[1, 3, 2]Collections.sort(list01, new Comparator<Integer>() {//重寫(xiě)比較的規(guī)則@Overridepublic int compare(Integer o1, Integer o2) {//return o1-o2;//升序return o2-o1;//降序}});System.out.println(list01);ArrayList<Student> list02 = new ArrayList<>();list02.add(new Student("a迪麗熱巴",18));list02.add(new Student("古力娜扎",20));list02.add(new Student("楊冪",17));list02.add(new Student("b楊冪",18));System.out.println(list02);/*Collections.sort(list02, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {//按照年齡升序排序return o1.getAge()-o2.getAge();}});*///擴(kuò)展:了解Collections.sort(list02, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {//按照年齡升序排序int result = o1.getAge()-o2.getAge();//如果兩個(gè)人年齡相同,再使用姓名的第一個(gè)字比較if(result==0){result = o1.getName().charAt(0)-o2.getName().charAt(0);}return result;}});System.out.println(list02);} }

?

超強(qiáng)干貨來(lái)襲 云風(fēng)專(zhuān)訪(fǎng):近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的Collections集合工具类的方法_sort(List,Comparator)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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