java sort 第二个参数,Java中Colllections类的sort参数Comparator的重写

时间:2021/03/06

一.背景

最近做的算法排序题中有大佬是使用Collections类的sort方法实现的,感觉该方法在排序方面功能十分强大,就在这里总结一下具体的使用方法。

Collections类位于util包下,在该类中两个sort方法,这里我们使用的是有Comparator参数的sort方法,API文档中对该方法的解释如下:

8301c3f657467675a8388e1d4d0fc3db.png

从上面可以看出,sort方法的第一参数是list对象,第二个参数实现了Comparator接口的对象,该对象并需要重写compareTo方法,在该方法中定义了排序规则。

二.具体实现

这道题就是一个多排序问题,首先要根据运行时间进行排序,运行时间相同时再根据年:月:日进行排序,若前两个都相同,则根据分:秒:毫秒进行排序。我们的关键是通过实现Comparator类并重写compareTo方法来定义排序规则。注意:sort方法在排序时是按照从小到大进行的,若o1>o2,则应该返回1,若o1

这里sort方法的第二个参数我们使用的是匿名内部类的形式,泛型应该为要要比较对象的类型,如果这里泛型写为Object,则下面还要对参数进行强制类型转换。

具体代码:

importjava.util.Scanner;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;public classMain{public static voidmain(String[] args){//定义列表

Scanner in = newScanner(System.in);

ArrayList list = new ArrayList<>();//读取输入

while(in.hasNextLine()){

list.add(in.nextLine().trim());

}//进行排序,定义排序规则

Collections.sort(list, new Comparator(){public intcompare(String s1, String s2){

String[] str1= s1.split("\\s+");

String[] str2= s2.split("\\s+");//由于时间的长度不一致,所以不能直接比较字符串

double time1 = Double.parseDouble(str1[3].substring(0, str1[3].length() - 3));double time2 = Double.parseDouble(str2[3].substring(0, str2[3].length() - 3));if(time1 >time2){return 1;

}else if(time1

}else{if(!str1[1].equals(str2[1])){return str1[1].compareTo(str2[1]);

}else{return str1[2].compareTo(str2[2]);

}

}

}

});//输出排序结果

for(String item : list){

System.out.println(item);

}

}

}

原文:https://www.cnblogs.com/machi12/p/14490475.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值