Collections.sort( )分为两部分,一部分为排序规则,一部分为排序算法 。

规则用来判断对象,算法则考虑如何进行排序

对于自定义对象,sort()不知道规则,所以无法比较,这种情况下一定要定义排序规则。方式有两种:

第一种,java.lang下面的一个接口:Comparable。可以让自定义对象实现一个Comparable接口,这个接口只有一个方法comparableTo(Object o)

其规则是当前对象与o对象进行比较,返回一个int值,系统根据此值进行排序。

如当前对象>o对象,则返回值>0;

如当前对象=o对象,则返回值=0;
如当前对象<o对象,则返回值<0;
[java] view plaincopy
import java.util.*; class User implements Comparable<User>
{
private String name;
private Integer order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public int compareTo(User arg0) {
return this.getOrder().compareTo(arg0.getOrder());
}
} public class Test{ public static void main(String[] args) {
User user1 = new User();
user1.setName("zhangsan");
user1.setOrder(10);
User user2 = new User();
user2.setName("lisi");
user2.setOrder(6);
User user3 = new User();
user3.setName("wangwu");
user3.setOrder(11);
User user4 = new User();
user4.setName("zhaoqi");
user4.setOrder(2);
List<User> list = new ArrayList<User>();
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
Collections.sort(list);
for(User u : list){
System.out.println(u.getName());
}
}
} 第二种方式,java.util下有一个Comparator(比较器)。它拥有compare( )方法,用来比较两个对象。
[java] view plaincopy
import java.util.*;
class User { //此处无需实现Comparable接口
private String name;
private Integer order;
public User(){};
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
} public class Test2{
public static void main(String[] args) {
User user1 = new User();
user1.setName("zhangsan");
user1.setOrder(10);
User user2 = new User();
user2.setName("lisi");
user2.setOrder(6);
User user3 = new User();
user3.setName("wangwu");
user3.setOrder(11);
User user4 = new User();
user4.setName("zhaoqi");
user4.setOrder(2); List<User>list = new ArrayList<User>();
list.add(user2);
list.add(user1);
list.add(user3);
list.add(user4); Collections.sort(list,new Comparator<User>(){
public int compare(User arg0, User arg1) {
return arg0.getOrder().compareTo(arg1.getOrder());
}
});
for(User u : list){
System.out.println(u.getName());
}
}
} 前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁。 多字段比较: [java] view plaincopy
Collections.sort(list,new Comparator <user>(){
public int compare(User arg0, User arg1) {
// 第一次比较专业
int i = arg0.getOrder().compareTo(arg1.getOrder());
// 如果专业相同则进行第二次比较
if(i==0){
// 第二次比较学制
int j=arg0.getXXX().compareTo(arg1.getXXX());
// 如果学制相同则返回按年龄排序
if(j==0){
return arg0.getCCC().compareTo(arg1.getCCC());
}
return j;
}
return i;
}
});

Collections.sort方法对list排序的两种方式的更多相关文章

  1. 用Java集合中的Collections.sort方法对list排序的两种方法

    用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  2. java中Collections.sort()方法实现集合排序

    1.Integer/String泛型的List进行排序 List <Integer> integerlist = new ArrayList<Integer>();   //定 ...

  3. java集合进行排序的两种方式

    java集合的工具类Collections中提供了两种排序的方法,分别是: Collections.sort(List list) Collections.sort(List list,Compara ...

  4. spring boot @ResponseBody转换JSON 时 Date 类型处理方法,Jackson和FastJson两种方式,springboot 2.0.9配置fastjson不生效官方解决办法

    spring boot @ResponseBody转换JSON 时 Date 类型处理方法 ,这里一共有两种不同解析方式(Jackson和FastJson两种方式,springboot我用的1.x的版 ...

  5. Java基础集锦——利用Collections.sort方法对list排序

    要想对List进行排序,可以让实体对象实现Comparable接口,重写compareTo方法即可实现按某一属性排序,但是这种写法很单一,只能按照固定的一个属性排序,没变法变化.通过下面这种方法,可以 ...

  6. php用curl调用接口方法,get和post两种方式

    首先是客户端执行方法ApiModel.php: <?php /** * 模拟post进行url请求 * @param string $url * @param array $post_data ...

  7. Spring(十三):使用工厂方法来配置Bean的两种方式(静态工厂方法&实例工厂方法)

    通过调用静态工厂方法创建Bean 1)调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当客户端需要对象时,只需要简单地调用静态方法,而不需要关心创建对象的具体细节. 2)要声明通过静态 ...

  8. Spring容器自动调用方法的两种方式

    先看一个Spring中Bean的实例化过程: 1.配置文件中指定Bean的init-method参数 <bean class="com.jts.service.UserService& ...

  9. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)

    Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...

随机推荐

  1. BZOJ 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛( LIS )

    裸的LIS ----------------------------------------------------------------- #include<cstdio> #incl ...

  2. ThinkPHP第七天(F函数使用,项目分组配置,项目分组模板文件放置规则配置)

    1.F(文件名称,写入数据,写入地址),用于将数据写入至磁盘文件中,如F('Data',$arr,'./Data/'),作用是将$arr写入至网站根目录的Data文件夹中的Data.php中. 2.读 ...

  3. phpcms v9附件上传后显示链接名称如何改为附件名称?

    使用phpcms v9的朋友都知道,v9在后台添加内容的时候上传附件显示的是一个链接,这样太不人性化了,那怎么显示文件名称呢 ?小编以前发布文章的时候都是上传后复制链接在给文字加上超链接的,这样非常的 ...

  4. hdu 4779 Tower Defense 2013杭州现场赛

    /** 题意: 有两种塔,重塔,轻塔.每种塔,能攻击他所在的一行和他所在的一列, 轻塔不 能被攻击,而重塔可以被至多一个塔攻击,也就是说重塔只能被重塔攻击.在一个n*m 的矩阵中,最少放一个塔,可放多 ...

  5. 第一章:介绍Django

    django简单来说就是一个Web开发框架.Web框架为应用程序提供了一套程序框架,这样你可以专注于编写清晰.易维护的代码,而无需从头做起. models.py文件主要用一个Python类来描述数据表 ...

  6. QNetworkAccessManager跳转URL处理(使用QNetworkRequest::RedirectionTargetAttribute获得跳转URL)

    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*))); void Mai ...

  7. qt实现-给SQLITE添加自定义函数

    需要使用sqlite里的password对某个字段进行加密,由于使用的sqlite是由QT封装好的QSqlDatabase,没有发现加载扩展函数的方法,所以自己实现了一个. 在网上也没找到相应的参考, ...

  8. IT第七天 - 类及其属性、方法的理解,断点调试初识,代码优化总结,编程逻辑培养

    IT第七天 上午 类 1.对象:是多个实体抽象出来的共同点集合,对象包括:属性(即实体的特征).方法(即尸体的功能作用) 2.程序中,用类来模拟对象 3.类是抽象的,是对象的类型,是将多个拥有相同属性 ...

  9. 使用Git上传代码到GitHub详细的不能再详细教程

    据说不会用GitHub的程序员连菜鸟都不算,确实,GitHub上有大量优秀的代码,我们也可以将自己的代码分享上去. 首先,你要有一个GitHub的账号,https://github.com/在官网注册 ...

  10. python成长之路——第三天

    一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在pyt ...