<正则吃饺子> :关于Collections中 比较器的简单使用
在线文档地址: http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
sort
public static <T extends Comparable<? super T>> void sort(List<T> list)
- 根据元素的 自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是 可相互比较的(也就是说,对于列表中的任何 e1 和 e2 元素, e1.compareTo(e2) 不得抛出 ClassCastException)。
此排序方法具有稳定性:不会因调用 sort 方法而对相等的元素进行重新排序。
指定列表必须是可修改的,但不必是大小可调整的。
该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n) 性能。 此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生的 n2 log(n) 性能。
-
- 参数:
list- 要排序的列表。- 抛出:
ClassCastException- 如果列表包含不 可相互比较 的元素(例如,字符串和整数)。UnsupportedOperationException- 如果指定列表的列表迭代器不支持 set 操作。- 另请参见:
Comparable- -------------------------------------------------------------------
-
sort
public static <T> void sort(List<T> list,
Comparator<? super T> c)- 根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须可使用指定比较器 相互比较(也就是说,对于列表中的任意 e1 和 e2 元素, c.compare(e1, e2) 不得抛出 ClassCastException)。
此排序被保证是稳定的:不会因调用 sort 而对相等的元素进行重新排序。
排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n) 性能。 指定列表必须是可修改的,但不必是可大小调整的。此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生的 n2 log(n) 性能。
-
- 参数:
list- 要排序的列表。c- 确定列表顺序的比较器。 null 值指示应该使用元素的 自然顺序。- 抛出:
ClassCastException- 如果列表中包含不可使用指定比较器 相互比较 的元素。UnsupportedOperationException- 如果指定列表的列表迭代器不支持 set 操作。- 另请参见:
Comparator-
package com.zhengze.test; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; public class Cat {
private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} /**
* 数据获取
* @return
*/
public List<Cat> getCatList() {
List<Cat> list = new ArrayList<Cat>();
Cat cat = null;
for (int i = 0; i <= 8; i++) {
cat = new Cat();
cat.setName("nnn" + (i + 1));
cat.setAge(i + 1);
list.add(cat);
} return list;
} /**
* 模拟比较器
*/
public void compare() {
// 模拟获取数据
List<Cat> list = this.getCatList();
Comparator<Cat> comm = new Comparator<Cat>() { @Override
public int compare(Cat o1, Cat o2) {
// 这里面可以做一些业务处理,现在只是使用集合中的cat的年龄进行排序 return o2.getAge() - o1.getAge(); // 倒序
// return o1.getAge() - o2.getAge(); //正序
}
};
// 比较 1
Collections.sort(list, comm); // 比较2
// 需要 Cat 实现 Comparable 接口。则可以直接在 Cat 类中 重写 compareTo 方法,在此处可以自定义比较方式。
// 基于此就可以,Collections.sort(list); for (int i = 0; i < list.size(); i++) {
Cat cat = list.get(i);
System.out.println("名称:" + cat.getName());
System.out.println("年龄:" + cat.getAge());
// 打印结果:此处是倒序
// 名称:nnn8
// 年龄:8
// 名称:nnn7
// 年龄:7
// 名称:nnn6
// 年龄:6
// 名称:nnn5
// 年龄:5
// 名称:nnn4
// 年龄:4
// 名称:nnn3
// 年龄:3
// 名称:nnn2
// 年龄:2
// 名称:nnn1
// 年龄:1
}
} // main方法
public static void main(String[] agrs) {
Cat c = new Cat();
c.compare(); } }
- 根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须可使用指定比较器 相互比较(也就是说,对于列表中的任意 e1 和 e2 元素, c.compare(e1, e2) 不得抛出 ClassCastException)。
<正则吃饺子> :关于Collections中 比较器的简单使用的更多相关文章
- <正则吃饺子> :关于微信支付的简单总结说明(二)
关于微信退款 一.官方文档 申请退款:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_4&index=6 二.退款流程 ...
- <正则吃饺子> :关于微信支付的简单总结说明(一)
关于支付,一直想参与开发,现在根据项目中已有及参见的微信开发文档,将自己对于微信开发的流程进行简单的总结,以备后用和帮助后来者. 一.相关官方文档 微信支付官方文档:https://pay.weixi ...
- <正则吃饺子>:关于java中垃圾回收技术的简单学习总结
知识介绍来自网络,后面会根据继续学习进行补充和适当的修改,谢谢!原文地址:http://www.importnew.com/26821.html#comment-578355 java中的垃圾回收机制 ...
- <正则吃饺子> :关于oracle 中 with的简单使用
oracle中 with的简单使用介绍,具体可以参见其他的博文介绍,在这里只是简单的介绍: with 构建了一个临时表,类似于存储过程中的游标,我是这么理解的. 一.数据准备: select * fr ...
- <正则吃饺子> :关于redis集群的搭建、集群测试、搭建中遇到的问题总结
项目中使用了redis ,对于其基本的使用,相对简单些,根据项目中已经提供的工具就可以实现基本的功能,但是只是这样的话,对于redis还是太肤浅,甚至刚开始时候,集群.多节点.主从是什么,他们之间是什 ...
- <正则吃饺子> :关于mybatis中使用的问题(一)
在公司项目开始之前,根据springboot .mybatis.Swagger2 整合了一个demo,在测试时候,遇到的问题,简单记录.之前在使用mybatis时候,没有注意到这一点. 1.错误:Th ...
- <正则吃饺子>:关于java中对内存部分的简单总结整理
在项目和一些群讨论中,经常看到对内存的处理,但是,自己确是一知半解的,基于此,就把这部分的知识简单的整理了下,知识点来源于网络博文,也一一标明出处,谢谢. package com.love.malin ...
- <正则吃饺子> :关于Guava中 Joiner 和 Splitter 的简单使用
在现在项目中经常看到 这两个类的使用,开始时候不明白具体是做的什么事情,就单独拿出来学习下了,参照了网上的博文,这里主要是简单的讲讲用法. 具体对这两个类,不做过多介绍,有个在线文档,需要的可以自己去 ...
- <正则吃饺子> :关于oracle 中 exists 、not exists 的简单使用
话不多说,简单的总结而已.网络上很多很详细介绍. 例如,博文:http://blog.csdn.net/zhiweianran/article/details/7868894 当然这篇也是转载的,原 ...
随机推荐
- python 基础 1.5 python数据类型(三)--元组常用方法示例
#/usr/bin/python#coding=utf-8#@Time :2017/10/13 15:02#@Auther :liuzhenchuan#@File :元组.py #tuple() 字符 ...
- webstorm-----eslint的配置和使用
https://blog.csdn.net/qq_29329037/article/details/80100450
- Swift 学习笔记 (解决Swift闭包中循环引用的三种方法)
话不多说 直接上代码 class SmartAirConditioner { var temperature:Int = //类引用了函数 var temperatureChange:((Int)-& ...
- HTML 学习笔记 JQuery(事件)
加载DOM 以浏览器加载文档为例,在页面加载完毕后,浏览器会通过JavaScript为DOM元素添加事件.在常规的JavaScript中,通常使用window.onload方法,在JQuery中通常使 ...
- mysql date函数相关用法整理(持续更新)
date_add(now(), INTERVAL 1 day) 增加一天 date_format(d,'%Y-%m-%d %T') 这里的d为datestamp类型,格式化成 yyyy-MM ...
- [java,maven] 使用 maven 来搭建简单的 netty 开发环境
大致过程是: 首先, 使用 mvn 命令在指定路径下面创建一套简单的 java 文件包. 然后, 使用 JIdea 导入 maven 项目的方式将创建好的文件包加载到 IDE 环境中.‘ 接下来, ...
- SAP FI 科目代码
资产类 现金 银行存款 其他货币资金 短期投资 短期投资跌价准备 应收票据 应收股利 应收利息 应收账款 其他应收款 坏账准备 预付账款 应收补贴款 物料采购 原材料 包装物 低值易耗品 材料成本差异 ...
- 《Python Machine Learning》索引
目录部分: 第一章:赋予计算机从数据中学习的能力 第二章:训练简单的机器学习算法——分类 第三章:使用sklearn训练机器学习分类器 第四章:建立好的训练集——数据预处理 第五章:通过降维压缩数据 ...
- 怎样避免C#中将小数转换为字符串时出现科学记数法
在C#中如果float.double.decimal类型的值,小数点后的0太多时,C#会用科学记数法来表示小数的值. 例如下面的double类型0.00009,如果我们直接将其用ToString()方 ...
- Java基础教程:JDBC编程
Java基础教程:JDBC编程 1.什么是JDBC JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. JDBC A ...