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