sort()是Collections中的静态方法,用于对List容器中的元素排序。

如容器list中存储的是Integer对象

        List<Integer> list =Arrays.asList(3, 2, 7, 5, 9, 6);
System.out.println(Arrays.toString(list.toArray()));

输出结果为:[3, 2, 7, 5, 9, 6]

使用Collections.sort()对list排序

        Collections.sort(list);
System.out.println(Arrays.toString(list.toArray()));

输出结果为:[2, 3, 5, 6, 7, 9]

使用Collections.sort()是有约束条件的,List中存储的对象必须实现了Comparable接口,如Integer,Double等。

如下定义一个Interval(区间)对象:

class Interval {
int start;
int end;
Interval(int start, int end) {
this.start = start;
this.end = end;
}

容器list中存储的为Interval对象,使用Collections.sort()方法则报错。

        List<Interval> list = new ArrayList<>();
list.add(new Interval(2, 4));
list.add(new Interval(0, 4));
list.add(new Interval(3, 5));
list.add(new Interval(1, 2));
list.add(new Interval(7, 9));
list.add(new Interval(6, 8)); Collections.sort(list); // error

一种方法是使Interval类实现Comparable接口,按Interval对象中start大小排序。

class Interval implements Comparable<Interval>{
int start;
int end;
Interval(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public int compareTo(Interval temp) {
return this.start - temp.start;
}
}

再使用Collections.sort()方法对list中的元素排序,便不会报错。

        List<Interval> list = new ArrayList<>();
list.add(new Interval(2, 4));
list.add(new Interval(0, 4));
list.add(new Interval(3, 5));
list.add(new Interval(1, 2));
list.add(new Interval(7, 9));
list.add(new Interval(6, 8));
for (Interval obj:list)
System.out.print(obj.start + " ");
System.out.println(); Collections.sort(list); for (Interval obj:list)
System.out.print(obj.start + " ");

输出结果为:

2 0 3 1 7 6
0 1 2 3 6 7

另一种方法是使用Collections.sort(List<T> list, Comparator<? super T> c),使用一个Comparator对象,完成list中元素的排序。

如:

class MyComparator implements Comparator<Interval> {
public int compare(Interval o1, Interval o2) {
return o1.start - o2.start;
}
}
        Collections.sort(list, new MyComparator());

        for (Interval obj:list)
System.out.print(obj.start + " ");

输出结果为:0 1 2 3 6 7

也可以使用匿名内部类

        Collections.sort(list, new Comparator<Interval>(){

            @Override
public int compare(Interval o1, Interval o2) {
return o1.start - o2.start;
}
});

也可以使用Lambda表达式:

        Collections.sort(list, (a,b)->(a.start-b.start));

总结:

Collections.sort()用于对List中存储的对象进行排序,该方法有两种使用方式。

Collections.sort(List<T> list)   list中的元素必须实现了Comparable接口。

Collections.sort(List<T>list, Comparator<? super T>),使用Comparator对象比较list中的元素。

java Collections.sort()的更多相关文章

  1. Java Collections.sort方法对list集合排序

    1.排序测试类 package com.ljq.test; import java.util.ArrayList; import java.util.Collections; import java. ...

  2. java Collections.sort()实现List排序自定义方法

    方法一: package testSimple; import java.util.ArrayList; import java.util.Collections; import java.util. ...

  3. java Collections.sort()实现List排序的默认方法和自定义方法

    1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...

  4. java Collections.sort()实现List排序的默认方法和自定义方法【转】

    1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...

  5. 关于java Collections.sort 排序

    public static void main(String[] args) { int[] dd = {12,34,46,123,23,2,35,13,543231,65,5645,57}; Arr ...

  6. JAVA Collections工具类sort()排序方法

    主要分析内容: 一.Collections工具类两种sort()方法 二.示例 一.Collections工具类两种sort()方法 格式一: public static <T extends ...

  7. java中Collections.sort排序详解

    Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f, ...

  8. Java面试总结系列之Collections.sort()

    面试中被问到,集合类中的排序方法是怎么实现的?没有回答上来,故而总结如下:你知道么? 前提:在eclipse中对于自己的代码可以通过按住Ctrl的同时单击名称跳入相应源码中.但eclipse默认没有添 ...

  9. python 中的sort 和java中的Collections.sort()函数的使用

    x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...

随机推荐

  1. day 34 进程线程排序 抢票 初级生产者消费者

    # 实现的内容 模拟购票 20个人买,就有一张购票查,的时候大家都看到,但是购买只能一人购买成功#利用互斥锁# from multiprocessing import Process,Lock# im ...

  2. 『转』credential Provider 简易改写攻略

    本次小学期的题目是windows下的凭证改编.本人负责的是Win7 下的credentials Provider 的编写以及其他杂七杂八的工作.当然给我印象最深的就是credentials provi ...

  3. 64-65管道,rm与rmdir

    听说linux根目录tmp文件夹内是临时文件.用久了会产生很多垃圾文件 请问下面的临时文件怎么维护清理?全部没用删除,还是? /tmp 公用的临时文件存储点 linux下的文件结构 /bin 二进制可 ...

  4. Python 区分方法和函数

    def func(): print("我是函数") class Foo: def chi(self): print("我是吃") # print(func) # ...

  5. 河南省第四届ACM省赛(T3) 表达式求值

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...

  6. ecmall 主从表的4种模型关系

    eccore/model/model.base.php对应关系: 举例:在includes/models goods.model.php 里 因为店铺可以对应多个商品,商品只能对应一个店铺,所以商品B ...

  7. Power BI与Tableau基于Google搜索上的比较

    在数据分析领域里,不少的数据爱好者都会关心什么数据分析产品最好用?最重要的是,很多的企业也特别希望员工能真正知道如何使用这些BI平台以确保公司的投资是值得.同类的文章,小悦也曾发布过,可参考最近< ...

  8. shapefile 转 geojson 文件类型

    http://mapshaper.org/ 从natural earth下载后,扔进去2个文件,就可以了.

  9. 【转载】 如何看待 2019 年 CS PhD 现扎堆申请且大部分为 AI 方向?未来几年 AI 泡沫会破裂吗?

    原贴地址: https://www.zhihu.com/question/316135639 作为一个 AI 方向的在读博士生,实在是过的蛮闹心,无意中逛知乎发现了这个帖子,发现很适合现在的自己,于是 ...

  10. 12.double的int方

    给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 不要用Math.pow(double,double)哟.效率极其低下,比连成慢好多: 题 ...