java中實(shí)現(xiàn)對(duì)象排序的兩種方法(Comparable,Comparator)
前言:
我們知道,在平時(shí)做項(xiàng)目的過(guò)程中,我們總會(huì)用到各種各樣的排序,或是升序,或是降序。在java中,要實(shí)現(xiàn)排序有好多中方式,比如我們耳熟能詳?shù)拿芭菖判?、選擇排序等,但是我們一般都不用寫(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,降序
@Override
public 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> {
@Override
public int compare(Student o,Student o1) {
return o1.getName().compareTo(o.getName());
}
}接著稍微改一下Collections.sort方法,如下:
Collections.sort(stus,new SortName());
運(yùn)行結(jié)果:

到此,排序完成,最后大家在思考一下,如果name的值為漢字,那么可以按照姓名的首字母倒序排序嗎?
總結(jié)
到此這篇關(guān)于java中實(shí)現(xiàn)對(duì)象排序的兩種方法的文章就介紹到這了,更多相關(guān)java對(duì)象排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring AOP實(shí)現(xiàn)功能權(quán)限校驗(yàn)功能的示例代碼
本篇文章主要介紹了Spring AOP實(shí)現(xiàn)功能權(quán)限校驗(yàn)功能的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
springboot+vue項(xiàng)目從第一行代碼到上線部署全流程
本文詳細(xì)介紹了如何從零開(kāi)始搭建一個(gè)基于Spring Boot和Vue.js的前后端分離項(xiàng)目,并涵蓋項(xiàng)目需求分析、技術(shù)選型、項(xiàng)目結(jié)構(gòu)設(shè)計(jì)、前后端交互、部署上線等全過(guò)程,感興趣的朋友跟隨小編一起看看吧2024-11-11
JAVA 日常開(kāi)發(fā)中Websocket示例詳解
JAVA |日常開(kāi)發(fā)中Websocket詳解,WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,它在Web應(yīng)用中實(shí)現(xiàn)了客戶(hù)端與服務(wù)器之間的實(shí)時(shí)數(shù)據(jù)傳輸,本文將詳細(xì)介紹Java開(kāi)發(fā)中WebSocket的使用,包括基本概念、Java API、使用示例以及注意事項(xiàng),感興趣的朋友一起看看吧2024-12-12
解決nacos項(xiàng)目啟動(dòng)報(bào)錯(cuò):Connection refused: no further&
這篇文章主要介紹了解決nacos項(xiàng)目啟動(dòng)報(bào)錯(cuò):Connection refused: no further informa問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

