java中如何对对象排序?
大家好,我是雄雄。
前言:
我們知道,在平時做項目的過程中,我們總會用到各種各樣的排序,或是升序,或是降序。在java中,要實現排序有好多中方式,比如我們耳熟能詳的冒泡排序、選擇排序等,但是我們一般都不用寫,JDK給我們提供了好多現成方法供我們使用,今天我們就來看看,java中如何使用Comparator進行排序。
1
實現Comparable進行排序
下面我們來看一個簡單的例子:
package?org.test;/*** * * 項目名稱:BianChengXiGuan * 類名稱:Student * 類描述:學生類 * 創建人:Mu Xiongxiong * 創建時間: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;}/*** * 構造函數 * @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;}/*** * 構造函數 * @discription?* @author?Mu Xiongxiong * @created?2020-10-19 上午8:47:48 * 個人博客:https://blog.csdn.net/qq_34137397* 微信公眾號:雄雄的小課堂*/public?Student()?{super();}//接口中必須要實現的方法//按照sid進行排序//如果傳過來的sid比本身的sid小的話,返回1,升序//如果傳過來的sid比本身的sid大的話,返回-1,降序@Overridepublic?int?compareTo(Student o)?{if(sid>o.sid){return?1;}else?if(sid==o.sid){return?0;}else{return?-1;}}}這是一個很簡單的Student實體類,其中對字段的封裝,以及構造方法就不在這里說明了。重點看compareTo方法,此方法是Comparable接口中的方法,我們實現了Comparable接口之后必須要實現該方法。要實現升序和降序,肯定少不了比較,那么compareTo方法的作用就在此,用來比較的!
代碼中,compareTo方法中實現的是按照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());}}運行結果如下:
這是升序,如果想要降序排序,簡單的改一下compareTo方法的比較符號即可。按照sid進行排序,比較簡單,那假如現在有這樣的需求:按照姓名(字符)順序降序排序,我們應該怎么實現?
2
實現Comparator進行排序
我們看Collections.sort方法,他還有一個重載方法Collections.sort(Listlists,Comparator c);可以接受一個Comparator實現類,我們就可以利用這一點,實現對name進行排序,代碼如下:
package?org.test;import?java.util.Comparator;public?class?SortName?implements?Comparator<Student> {@Overridepublic?int?compare(Student o,Student o1)?{return?o1.getName().compareTo(o.getName());}}接著稍微改一下Collections.sort方法,如下:
Collections.sort(stus,new?SortName());運行結果:
到此,排序完成,最后大家在思考一下,如果name的值為漢字,那么可以按照姓名的首字母倒序排序嗎?
往期精彩
暢想小組KTV點歌系統簡介
2020-10-19
SQ小組KTV點歌系統簡介
2020-10-18
凌云KTV點歌系統功能簡介
2020-10-17
注意!在subList生成子列表之后,一定不要隨便更改原列表
2020-10-15
神奇!一行代碼實現刪除某集合下標20-30的元素
2020-10-14
‘小會計’的轉行之旅
2020-10-13
子列表只是原列表的一個視圖
2020-10-12
點分享
點點贊
點在看
總結
以上是生活随笔為你收集整理的java中如何对对象排序?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学软件工程,适合买什么笔记本电脑?
- 下一篇: 在总统选举期间识别假新闻-避免恐慌和冷漠