java中實現(xiàn)對象排序的兩種方法(Comparable,Comparator)
前言:
我們知道,在平時做項目的過程中,我們總會用到各種各樣的排序,或是升序,或是降序。在java中,要實現(xiàn)排序有好多中方式,比如我們耳熟能詳?shù)拿芭菖判颉⑦x擇排序等,但是我們一般都不用寫,JDK給我們提供了好多現(xiàn)成方法供我們使用,今天我們就來看看,java中如何使用Comparator進行排序。
1、實現(xiàn)Comparable進行排序
下面我們來看一個簡單的例子:
package org.test; /** * * * 項目名稱:BianChengXiGuan * 類名稱:Student * 類描述:學生類 * 創(chuàng)建人:Mu Xiongxiong * 創(chuàng)建時間:2020-10-19 上午8:47:01 * 修改人:Mu Xiongxiong * 修改時間:2020-10-19 上午8:47:01 * 修改備注: * 個人博客:https://blog.csdn.net/qq_34137397 * 微信公眾號:雄雄的小課堂 * @version * */ public class Student implements Comparable<Student>{ /** * 學生編號 */ private int sid; /** * 學生姓名 */ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } /** * * 構(gòu)造函數(shù) * @discription * @author Mu Xiongxiong * @created 2020-10-19 上午8:47:43 * @param sid * @param name * 個人博客:https://blog.csdn.net/qq_34137397 * 微信公眾號:雄雄的小課堂 */ public Student(int sid, String name) { super(); this.sid = sid; this.name = name; } /** * * 構(gòu)造函數(shù) * @discription * @author Mu Xiongxiong * @created 2020-10-19 上午8:47:48 * 個人博客:https://blog.csdn.net/qq_34137397 * 微信公眾號:雄雄的小課堂 */ public Student() { super(); } //接口中必須要實現(xiàn)的方法 //按照sid進行排序 //如果傳過來的sid比本身的sid小的話,返回1,升序 //如果傳過來的sid比本身的sid大的話,返回-1,降序 @Override public int compareTo(Student o) { if(sid>o.sid){ return 1; }else if(sid==o.sid){ return 0; }else{ return -1; } } }
這是一個很簡單的Student實體類,其中對字段的封裝,以及構(gòu)造方法就不在這里說明了。重點看compareTo方法,此方法是Comparable接口中的方法,我們實現(xiàn)了Comparable接口之后必須要實現(xiàn)該方法。要實現(xiàn)升序和降序,肯定少不了比較,那么compareTo方法的作用就在此,用來比較的!
代碼中,compareTo方法中實現(xiàn)的是按照sid進行排序,如果傳過來的sid比本身的sid小的話,返回1,升序。如果傳過來的sid比本身的sid大的話,返回-1,降序。 然后我們寫個測試方法進行測試:
//對集合進行排序 public static void testSortList(){ List<Student> stus = new ArrayList<Student>(); stus.add(new Student(1,"a")); stus.add(new Student(4,"d")); stus.add(new Student(5,"e")); stus.add(new Student(2,"b")); stus.add(new Student(3,"c")); System.out.println("排序之前:"); for (Student s : stus) { System.out.println(s.getSid()+"---"+s.getName()); } Collections.sort(stus); //Collections.sort(stus,new SortName()); System.out.println("排序之后:\n"); for (Student s : stus) { System.out.println(s.getSid()+"---"+s.getName()); } }
運行結(jié)果如下:
這是升序,如果想要降序排序,簡單的改一下compareTo方法的比較符號即可。按照sid進行排序,比較簡單,那假如現(xiàn)在有這樣的需求:按照姓名(字符)順序降序排序,我們應(yīng)該怎么實現(xiàn)?
2、實現(xiàn)Comparator進行排序
我們看Collections.sort方法,他還有一個重載方法Collections.sort(Listlists,Comparator c);可以接受一個Comparator實現(xiàn)類,我們就可以利用這一點,實現(xiàn)對name進行排序,代碼如下:
package org.test; import java.util.Comparator; public class SortName implements Comparator<Student> { @Override public int compare(Student o,Student o1) { return o1.getName().compareTo(o.getName()); } }
接著稍微改一下Collections.sort方法,如下:
Collections.sort(stus,new SortName());
運行結(jié)果:
到此,排序完成,最后大家在思考一下,如果name的值為漢字,那么可以按照姓名的首字母倒序排序嗎?
總結(jié)
到此這篇關(guān)于java中實現(xiàn)對象排序的兩種方法的文章就介紹到這了,更多相關(guān)java對象排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea中springboot項目創(chuàng)建后追加依賴
在項目創(chuàng)建的時候選擇好依賴創(chuàng)建項目,之后追加依賴不是很方便,本文就來介紹一下idea中springboot項目創(chuàng)建后追加依賴,具有一定的參考價值,感興趣的可以了解一下2024-03-03