博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java集合排序(面试必考点之一)
阅读量:4574 次
发布时间:2019-06-08

本文共 2769 字,大约阅读时间需要 9 分钟。

集合是Java面试必考知识点,而集合的排序也是非常重要的,工作中经常用到,那么这个知识点也是必须要掌握的,下面是我曾经面试时被面试官问的问题:

根据API可知,Java集合的工具类Collections提供了两种排序方式:Collections.sort(List list) 和 Collections.sort(List list,Comparator c)。

第一种方式称为自然排序(一般是升序),参与排序的对象需实现comparable接口,重写其compareTo()方法。

第二种方式称为自定义排序,需编写匿名内部类(匿名内部类后面篇章会讲解),先new一个Comparator接口的比较器对象,同时实现compare()其方法,

然后将待排序的List列表对象和比较器对象传给Collections.sort()方法的参数列表中实现排序功能。

特点:第一种方式相对简单,容易掌握(尤其是对匿名内部类不熟悉的同学),由于待比较对象需要实现comparable,增加了耦合度,属性规则排序不够灵活。

第二种方式只需要在需要排序的地方,创建一个内部类的实例,重写其方法即可,灵活度更大。

 下面以Person类为例写一个分别按照年龄和姓名排序的例子:

public class Person implements Comparable
{ private int age; private String 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; } public Person(int age, String name) { super(); this.age = age; this.name = name; } @Override public int compareTo(Person o) { if (this.age > o.age) { return 1; } else if (this.age < o.age) { return -1; } else { return 0; } } public static void main(String[] args) { List
pList = new ArrayList<>(); Person p1 = new Person(10, "a张三"); Person p2 = new Person(18, "c李四"); Person p3 = new Person(20, "b王五"); Person p4 = new Person(15, "d陈六"); pList.add(p1); pList.add(p2); pList.add(p3); pList.add(p4); System.out.println("排序前依次输出:"); for (Person p : pList) { System.out.println(p.age + "===" + p.name); } // 按照年龄升序排序(默认) Collections.sort(pList); System.out.println("按年龄升序排序后依次输出:"); for (Person p : pList) { System.out.println(p.age + "===" + p.name); } // 按照年龄倒叙排序 Collections.reverse(pList); System.out.println("按年龄倒叙排序后依次输出:"); for (Person p : pList) { System.out.println(p.age + "===" + p.name); } // 按照姓名升序排序 Collections.sort(pList, new Comparator
() { @Override public int compare(Person o1, Person o2) { return o1.getName().compareTo(o2.getName()); } }); System.out.println("按照姓名升序排序后依次输出:"); for (Person p : pList) { System.out.println(p.age + "===" + p.name); } }}

排序前依次输出:

10===a张三
18===c李四
20===b王五
15===d陈六
按年龄升序排序后依次输出:
10===a张三
15===d陈六
18===c李四
20===b王五
按年龄倒叙排序后依次输出:
20===b王五
18===c李四
15===d陈六
10===a张三
按照姓名升序排序后依次输出:
10===a张三
20===b王五
18===c李四
15===d陈六

 

关注微信公众号【Java典籍】,收看更多Java干货

 ▼微信扫一扫下图↓↓↓二维码关注

 

转载于:https://www.cnblogs.com/bingyimeiling/p/10330838.html

你可能感兴趣的文章
【C#文件夹锁】C#文件夹加锁小工具
查看>>
mysql 数据库路径
查看>>
web服务器负载均衡部署及实现
查看>>
13.JOIN
查看>>
省市县三级联动
查看>>
多IP地址--笔记
查看>>
react native开发日记
查看>>
Virtual Dom是什么
查看>>
阶乘之和
查看>>
Unable to instantiate receiver xxx.receiver.NetworkReceiver异常
查看>>
C++调用C#类库函数
查看>>
vs2013编译项目去掉warning信息
查看>>
ASP.NET MVC html help
查看>>
C# 时间比较方法DateTime.Compare
查看>>
三级菜单小练习
查看>>
vim 插件管理
查看>>
Guid函数
查看>>
java的加减乘除问题
查看>>
Android 系统常用的权限
查看>>
类型参数约束 : Controller where T : class,new()
查看>>