集合排序 Collections.sort用法
大半夜,一同学来问这段代码.问了三个问题.
一,这个排序Sort()怎么用?
二,接口作为方法的参数是什么意思?
三,入参直接new Comparator(){}是怎么回事?
先回答第二,三个问题:
二,接口入参,意思就是:你需要传入一个实现了该接口的对象.
三,入参直接new Comparator(){};这是个匿名内部类(不知道的去问度娘),这个有什么用?没啥用!这跟你去新建个类,实现Comparator接口的compare方法,然后再new 对象放到参数里的效果是一样的.匿名内部类的用途就是可以偷懒(简洁),少敲代码.不需要再去单独建个类,再new对象.而是直接new接口.直接实现了.代码如下:
Collections.sort(list, new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {//o1-o2降序(顺序),反之o2-o1则升序(反序).int ageC = o1.getAge() - o2.getAge();if (ageC == 0) {return o1.getName().compareTo(o2.getName());} else {return ageC;} }});
如果你使用1.8以上的jdk,匿名内部类还可以这样写.用lambda表达式.这写法有什么用?更简洁了,就是又少写了一些代码.代码如下:
//去掉User也可以 Collections.sort(list, (o1, o2) ->{Collections.sort(list, (User o1, User o2) -> { //o1-o2降序(顺序),反之o2-o1则升序(反序).int ageC = o1.getAge() - o2.getAge();if (ageC == 0) {return o1.getName().compareTo(o2.getName());} else {return ageC;}});
最后说下Collections.sort()两种用法.这是JDK java.util包自带的排序方法.这两个方法都是调用Arrays.sort(), 最终排序算法是legacyMergeSort()_归并排序或 TimSort.sort()_结合了合并排序(merge sort)和插入排序(insertion sort)而得出的排序算法
//第一种方法
public static <T> void sort(List<T> list, Comparator<? super T> c) {
list.sort(c);
}
//第二种方法
public static <T extends Comparable<? super T>> void sort(List<T> list) {
list.sort(null);
}
第一种,入参是一个list,及Comparator () ,这个一个接口,接口可以用普通类实现后new对象入参,也可以用匿名内部类入参.
第二种,入参只有一个list,不过对list的泛型T做了限制,T或T的父类必须实现Comparable接口的compareTo方法.这个方法跟compare方法排序效果是一样的. 下面上demo.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;public class TestSort {public static void main(String[] args) {List<User> list = new ArrayList();list.add(new User(10, "test1"));list.add(new User(11, "test2"));list.add(new User(8, "test3"));//第一种用法1Collections.sort(list, new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {//o1-o2降序(顺序),反之o2-o1则升序(反序).int ageC = o1.getAge() - o2.getAge();if (ageC == 0) {//String类重写了compareTo方法return o1.getName().compareTo(o2.getName());} else {return ageC;}}});System.out.println(list.toString());//第一种用法2//jdk1.8lambda表达式写法Collections.sort(list, (User o1, User o2) -> {//o1-o2降序(顺序),反之o2-o1则升序(反序).int ageC = o1.getAge() - o2.getAge();if (ageC == 0) {return o1.getName().compareTo(o2.getName());} else {return ageC;}});List<UserC> list2 = new ArrayList();list2.add(new UserC(10, "test1"));list2.add(new UserC(11, "test2"));list2.add(new UserC(9, "test3"));//第二种用法Collections.sort(list2);System.out.println(list2.toString());}//静态内部类,方便写demo,不然还得多建几个类static class User {int age;String name;public User(int age, String name) {this.age = age;this.name = name;}@Overridepublic String toString() {return "User{" + "age=" + age + ", name='" + name + '\'' + '}';}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}//静态内部类,方便写demo,不然还得多建几个类,实现了Comparable接口,泛型匹配UserCstatic class UserC implements Comparable<UserC> {int age;String name;public UserC() {}public UserC(int age, String name) {this.age = age;this.name = name;}@Overridepublic String toString() {return "User{" + "age=" + age + ", name='" + name + '\'' + '}';}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic int compareTo(UserC o) {//o1-o2降序(顺序),反之o2-o1则升序(反序).int age = this.age - o.getAge();if (age == 0) {//String类重写了compareTo方法return this.name.compareTo(o.getName());}return age;}}
}
#欢迎关注-- ☆帮助各位同学辅导java相关问题☆.
集合排序 Collections.sort用法相关推荐
- JAVA-List排序-Collections.sort()-对象数组(集合)根据某一属性排序
JAVA-List排序-Collections.sort() 当我们想对一个对象数组(集合)根据某一属性进行排序时,我们可以使用list中的Collection.sort(),这是一种较快捷的方式. ...
- java的sort的用法_Java排序方法sort用法详解
Java排序方法sort用法详解 发布于 2020-2-28| 复制链接 摘记: 本文实例为大家分享了java对数组.集合的排序方法,供大家参考,具体内容如下对数组的排序: ```java //对数组 ...
- JAVA对list集合进行排序Collections.sort()
对一个集合中的对象进行排序,根据对象的某个指标的大小进行升序或降序排序.代码如下: // 进行降序排列Collections.sort(list, new Comparator<ResultTy ...
- java sort方法_Java排序方法sort用法详解
本文实例为大家分享了java对数组.集合的排序方法,供大家参考,具体内容如下 对数组的排序: //对数组排序 public void arraySort(){ int[] arr = {1,4,6,3 ...
- java 集合排序方法_java集合排序方法sort的使用
转自 http://blog.csdn.net/a1165117473/article/details/6965652 /* * To change this template, choose To ...
- ht-8 对arrayList中的自定义对象排序( Collections.sort(ListT list, Comparator? super T c))...
1 package com.iotek.set; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import ja ...
- java List 排序 Collections.sort() 对 List 排序
2019独角兽企业重金招聘Python工程师标准>>> //一个POJO例子 class User { String name; String age; public Us ...
- list排序(Collections.sort())
Collections.sort(userList, new Comparator<User>() {@Overridepublic int compare(User o1,User o2 ...
- 深入分析集合List的排序Collections.sort
List接口本身未提供sort的方法. 在jdk中提供了一个集合操作工具类Collections来操作集合. 查看Collections类,可以发下如下两个方法: static <T exten ...
最新文章
- 父子对等组之间的关系
- 17 PP配置-生产计划-总体维护工厂参数
- (转)C++类所占内存大小计算
- Kafka集群中 topic数据的分区 迁移到其他broker
- 车型代号对照表_车型代号对照表 2016最新版
- win10pe系统计算机名修改,pe 重置win10登陆密码怎么操作_如何用pe系统重置win10电脑密码-win7之家...
- 前端jq实现视频跟图片一起混播
- 本科生计算机论文中文核心,本科生可以发表核心期刊论文吗
- 小学信息技术信息与计算机课件,小学信息技术ppt课件
- 信用社考试计算机试题及答案,2016黑龙江省农村信用社考试题库-计算机试题及答案六...
- java bks证书_如何创建包含客户端证书链的BKS(BouncyCastle)格式的Java密钥库
- ISO工具集合,好用推荐,喜欢就下载使用
- Revit导出PDF格式图纸流程及“批量导出图纸”
- 情态动词+have+done用法整理
- 如何使用计算机网络打印机,电脑重新连接网络打印机的操作方法-电脑自学网...
- Mac快捷键大全及cheatsheet插件
- 前端自学路线 更新11.11
- 小米4s刷 android7,小米 MI 4S(小米4S 全网通 安卓7.0)获取Root权限服务含精简系统方案...
- 谐振电路的品质因数(Q值)
- 图像处理职位面试题汇总(1)
热门文章
- 50定焦镜头,看看你的单反相机是否需要它
- 游戏开发设计模式之状态模式 有限状态机 c#委托事件(unity3d 示例实现)
- 计算机网络基础动画_北大考研辅导班-2021北京大学622计算机应用基础考研经验真题参考...
- ​龙迅股份在科创板上市:募资约11亿元,赛富、深创投为股东​
- 搭乘社交电商“快车”平江特产“走四方”9个月狂卖300万
- 逗号运算符的简单分析和用法
- vue与单页面 使用Photo Sphere Viewer创建vr 360全景示例代码
- Cocos2D-X系列之RPG横版过关游戏完整版实例-2
- Tortoies清除SVN访问历史记录
- labview运行excel宏_【2017年整理】LabVIEW中Excel报告生成功能开发.pdf