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. sqlite的数据类型

    参考sqlite官方文档:https://www.sqlite.org/datatype3.html 绝大多数的SQL数据库采用静态的.严格的数据类型,数据库中的值由数据表的列类型定义决定. 然而,s ...

  2. MAVEN JDK版本配置

    使用maven的时候,默认会使用1.5版本的JDK,并且也是编译成1.5的,我的电脑里面用的JDK是1.7的,1.8也出来了,没理由还用1.5的吧!所以我手动改成了1.7,郁闷的是,每次 maven- ...

  3. [转]lua元表代码分析

    http://lin-style.iteye.com/blog/1012138 版本整理日期:2011/4/21 元表其实就是可以让你HOOK掉一些操作的一张表. 表的定义在ltm.h/c的文件里.对 ...

  4. Python学习笔记第二十二周(前端知识点补充)

    目录: 一.伪类 二.样式 1.字体 2.背景图片 3.margin和padding 4.列表属性 5.float 6.clear 7.position 8.text-decoration(a标签下划 ...

  5. [error]OpenCV Error: Assertion failed (ssize.width > 0 && ssize.height > 0) in resize, file modules/imgproc/src/resize.cpp, line 3289

    error OpenCV Error: Assertion failed (ssize.width > && ssize.height > ) terminate call ...

  6. 九度OJ1451题-信封错装

    题目1451:不容易系列之一 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2004 解决:1210 题目描述: 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了!做好“ ...

  7. [LeetCode&Python] Problem 506. Relative Ranks

    Given scores of N athletes, find their relative ranks and the people with the top three highest scor ...

  8. 初学html的单词笔记

    font-size: 文字大小color: 顏色solid: 边框线text-align: 間距center: 文字放在中間<head> 网页头部<title> 网页标题< ...

  9. HDU5658:CA Loves Palindromic (回文树,求区间本质不同的回文串数)

    CA loves strings, especially loves the palindrome strings. One day he gets a string, he wants to kno ...

  10. Vue.js学习使用心得(二)——自定义指令

    自定义指令 除了核心功能默认内置的指令,Vue 也允许注册自定义指令. 自定义指令可以定义全局指令,也可以定义局部指令. 使用 directives 选项来自定义指令. 定义全局指令: <div ...