java List排序方法 Comparator和Comparable
今天写的一个程序中需要对一个List进行排序,突然发现自己对这个问题一无所知,于是查阅资料并进行测试,在此做个记录。
Collections工具类中有两个方法可以对List进行排序,分别为:
- public static <T extends Comparable<? super T>> void sort(List<T> list)
- public static <T> void sort(List<T> list, Comparator<? super T> c)
从函数签名中可以看出,实现Comparable 或 Comparator接口 即可对List中的元素进行排序,测试代码如下,一看就明白
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List; public class SortList { public static void main(String[] args) {
List<Entry> ll = new LinkedList<Entry>();//此处可为ArrayList
ll.add(new Entry(3));
ll.add(new Entry(10));
ll.add(new Entry(7));
ll.add(new Entry(99));
Collections.sort(ll, new Comparator<Entry>(){
public int compare(Entry o1,Entry o2){
if(o1.getA()<o2.getA()){
return -1;
}
else if(o1.getA()>o2.getA())
return 1;
return 0;
}
});
for(Entry t:ll){
System.out.println(t.getA());
}
} } class Entry{ private int a; public Entry(int a){
this.a = a;
} public int getA(){
return a;
}
}
运行结果为:
3
7
10
99
另外一种方法为:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List; public class SortList { public static void main(String[] args) {
// TODO Auto-generated method stub List<Entry> ll = new LinkedList<Entry>();
ll.add(new Entry(3));
ll.add(new Entry(10));
ll.add(new Entry(7));
ll.add(new Entry(99));
Collections.sort(ll);
for(Entry t:ll){
System.out.println(t.getA());
}
} } class Entry implements Comparable{ private int a; public Entry(int a){
this.a = a;
} public int getA(){
return a;
} @Override
public int compareTo(Object o) {
Entry t = (Entry) o;
if(this.a>t.a){
return -1;
}
else if(this.a<t.a)
return 1;
else
return 0;
} }
运行结果为:
99
10
7
3
两种方法的效果都是一样的,不过使用Comparator接口的话,可以实现排序算法和业务逻辑相分离。对于一些已经实现的类也可以用Comparator来实现排序,而无需修改已实现的类。
java List排序方法 Comparator和Comparable的更多相关文章
- java常见排序方法
1.java常用排序方法 1) 选择排序 原理:a. 将数组中的每个元素,与第一个元素比较 如果这个元素小于第一个元素, 就将这个 两个元素交换. ...
- Java集合排序方法comparable和comparator的总结
一.概述Comparable和Comparator都是用来实现集合中元素的比较.排序的.Comparable是在集合内部定义的方法实现的排序,位于java.lang下.Comparator是在集合外部 ...
- Java ArrayList排序方法详解
由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在 ...
- Java自学-集合框架 Comparator和Comparable
Java Comparator和Comparable 步骤 1 : Comparator 假设Hero有三个属性 name,hp,damage 一个集合中放存放10个Hero,通过Collection ...
- Java集合中Comparator和Comparable接口的使用
在Java集合中,如果要比较引用类型泛型的List,我们使用Comparator和Comparable两个接口. Comparable接口 -- 默认比较规则,可比较的 实现该接口表示:这个类的实例可 ...
- 集合排序 Comparator和Comparable的使用区别
Java 排序 Compare Comparator接口 Comparable接口 区别 在Java中使用集合来存储数据时非常常见的,集合排序功能也是常用功能之一.下面看一下如何进行集合排序,常用的 ...
- java比较排序Comparable和Comparator
1 比较排序Comparable和Comparator 1.1 接口作用说明 Comparable和Comparator都是用来实现对象的比较.排序,对比时需要实现Compara ...
- Java://Comparator、Comparable的用法(按照要求将set集合的数据进行排序输出):
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; //comparator. ...
- Java基础 TreeSet()来实现数组的【定制排序】 : Comparable接口(自然排序) 或者 Comparator接口 (定制排序)
笔记: //排序真麻烦!没有C++里的好用又方便!ORZ!ORZ!数组排序还还自己写个TreeSet()和( Comparable接口(自然排序) 或者 Comparator接口 (定制排序))imp ...
随机推荐
- 【网络流24题】No.4 魔术球问题 (二分+最小路径覆盖)
[题意] 假设有 n 根柱子, 现要按下述规则在这 n 根柱子中依次放入编号为 1, 2, 3, ¼的球.( 1)每次只能在某根柱子的最上面放球.( 2)在同一根柱子中,任何 2 个相邻球的编号之和为 ...
- 了解php的session_start的工作原理
一.php使用session_start开启SESSION 二.浏览器访问该php脚本时,将产生两个可能: 1.(客户端的提交的cookie没有找到PHPSESSID的键) 或 (在服务器端没有找到P ...
- 三点经验:长时间运行函数需要随时发射信号报告进度,以及设置bool变量随时可以退出,每做一步操作必须及时记录和处理相关信息
三点经验:长时间运行函数需要随时发射信号报告进度,以及设置bool变量随时可以退出,每做一步操作必须及时记录和处理相关信息 不能到最后一起处理,否则万一中间出错了,这个记录状态就全部都乱了.
- 监控持有sql和被堵塞的sql
Session 1: mysql> start transaction; Query OK, 0 rows affected (0.00 sec) mysql> update Client ...
- linux使用crontab -e 遇到No space left on device
今天用linux的crontab -e编辑定时脚本的时候.遇到No space left on device的错误. 网上找了半天终于知道原因了,昨天晚上我的一个任务因为路径没写对,到时crontab ...
- BZOJ1345: [Baltic2007]序列问题Sequence
1345: [Baltic2007]序列问题Sequence Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 556 Solved: 274[Submi ...
- 计算几何(凸包模板):HDU 1392 Surround the Trees
There are a lot of trees in an area. A peasant wants to buy a rope to surround all these trees. So a ...
- ubuntu64bits环境下搭建Opencl的环境
此文介绍 ubuntu 平台下配置 AMD/ATI Opencl 环境,我是ubuntu 12.04. 主要分为六个步骤: 1. Take a look at your hardware to mak ...
- linux 多线程基础2
6. 名称:: pthread_detach 功能: 使线程进入分离状态. 头文件: #include <pthread.h> 函数原形: int pthread_detach(pthre ...
- date 、cal、bc
date cal date是显示日期与时间 date +%Y/%M/%D date +%Y/%m/%d date +%H:%M cal cal 2016