<正则吃饺子> :关于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 当然这篇也是转载的,原 ...
随机推荐
- Redis实现主从复制(转)
一.Redis的Replication: 这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了.相信在阅读完这篇Blog之后你也可以轻松做到.这里我们还是先列出一些理论性的 ...
- HTML5(石头剪刀布游戏开发)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Kibana + ElasticSearch
上面一张介绍了ElasticSearch的安装和简单用法. 现在应该都知道ElasticSearch是用来做全文搜索的,那今天我就简单介绍下Kibana. 它是专门用来查看ElasticSearch内 ...
- 十分钟git-服务器搭建ssh登陆
QQ820688215 微信公众号: 1首先,创建一个操作系统用户 git,并为其建立一个 .ssh 目录. $ sudo adduser git $ su git $ cd $ mkdir .ssh ...
- QQ登录集成到自己网站php代码(转载)
我们现在在各大网站论坛都可以看到点击一个QQ图标就可以利用自己的QQ号在网站进行登录了,下面我来告诉你一段QQ登录集成到自己网站php代码,有需要的朋友可参考. 1.打开open.qq.com 添加创 ...
- VIM中使用tab键自动完成(vim tab键自动补全 )插件supertab
supertab.vmb 这个插件好好用, Tab自动补全 http://www.vim.org/scripts/script.php?script_id=1643 安装步骤: 1.下载 supert ...
- linux撤销命令
u撤销上一步操作 ctrl+r恢复上一步被撤销的操作
- perl之创建临时文件夹遇到同名文件该咋办
当你在目录下进行一系列操作时,若要创建许多文件或者修改文件,可能会遇到许多麻烦的事.所以呢,新建一个文件夹,然后在这个文件夹下新建文件或者修改文件.假设,你的代码要在一个目录下新建一个文件夹,名为Tm ...
- 3D 图片播放焦点图插件Adaptor
在线演示 本地下载
- php 获取上上个月数据 使用 strtotime('-1 months')的一个bug
今天,使用php 日期函数处理数据,发现一个问题. 具体场景是这样的,我一直以为strtotime 格式化当前日期 或 指定日期可以找到对应的数据,比如我要查找上上个与的数据,因为我要获取当前时间的 ...