java Collections.sort()
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()的更多相关文章
- Java Collections.sort方法对list集合排序
1.排序测试类 package com.ljq.test; import java.util.ArrayList; import java.util.Collections; import java. ...
- java Collections.sort()实现List排序自定义方法
方法一: package testSimple; import java.util.ArrayList; import java.util.Collections; import java.util. ...
- java Collections.sort()实现List排序的默认方法和自定义方法
1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...
- java Collections.sort()实现List排序的默认方法和自定义方法【转】
1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...
- 关于java Collections.sort 排序
public static void main(String[] args) { int[] dd = {12,34,46,123,23,2,35,13,543231,65,5645,57}; Arr ...
- JAVA Collections工具类sort()排序方法
主要分析内容: 一.Collections工具类两种sort()方法 二.示例 一.Collections工具类两种sort()方法 格式一: public static <T extends ...
- java中Collections.sort排序详解
Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f, ...
- Java面试总结系列之Collections.sort()
面试中被问到,集合类中的排序方法是怎么实现的?没有回答上来,故而总结如下:你知道么? 前提:在eclipse中对于自己的代码可以通过按住Ctrl的同时单击名称跳入相应源码中.但eclipse默认没有添 ...
- python 中的sort 和java中的Collections.sort()函数的使用
x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...
随机推荐
- day 34 进程线程排序 抢票 初级生产者消费者
# 实现的内容 模拟购票 20个人买,就有一张购票查,的时候大家都看到,但是购买只能一人购买成功#利用互斥锁# from multiprocessing import Process,Lock# im ...
- 『转』credential Provider 简易改写攻略
本次小学期的题目是windows下的凭证改编.本人负责的是Win7 下的credentials Provider 的编写以及其他杂七杂八的工作.当然给我印象最深的就是credentials provi ...
- 64-65管道,rm与rmdir
听说linux根目录tmp文件夹内是临时文件.用久了会产生很多垃圾文件 请问下面的临时文件怎么维护清理?全部没用删除,还是? /tmp 公用的临时文件存储点 linux下的文件结构 /bin 二进制可 ...
- Python 区分方法和函数
def func(): print("我是函数") class Foo: def chi(self): print("我是吃") # print(func) # ...
- 河南省第四届ACM省赛(T3) 表达式求值
表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...
- ecmall 主从表的4种模型关系
eccore/model/model.base.php对应关系: 举例:在includes/models goods.model.php 里 因为店铺可以对应多个商品,商品只能对应一个店铺,所以商品B ...
- Power BI与Tableau基于Google搜索上的比较
在数据分析领域里,不少的数据爱好者都会关心什么数据分析产品最好用?最重要的是,很多的企业也特别希望员工能真正知道如何使用这些BI平台以确保公司的投资是值得.同类的文章,小悦也曾发布过,可参考最近< ...
- shapefile 转 geojson 文件类型
http://mapshaper.org/ 从natural earth下载后,扔进去2个文件,就可以了.
- 【转载】 如何看待 2019 年 CS PhD 现扎堆申请且大部分为 AI 方向?未来几年 AI 泡沫会破裂吗?
原贴地址: https://www.zhihu.com/question/316135639 作为一个 AI 方向的在读博士生,实在是过的蛮闹心,无意中逛知乎发现了这个帖子,发现很适合现在的自己,于是 ...
- 12.double的int方
给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 不要用Math.pow(double,double)哟.效率极其低下,比连成慢好多: 题 ...