今天写的一个程序中需要对一个List进行排序,突然发现自己对这个问题一无所知,于是查阅资料并进行测试,在此做个记录。

Collections工具类中有两个方法可以对List进行排序,分别为:

  1. public static <T extends Comparable<? super T>> void sort(List<T> list)
  2. 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的更多相关文章

  1. java常见排序方法

    1.java常用排序方法 1) 选择排序         原理:a. 将数组中的每个元素,与第一个元素比较          如果这个元素小于第一个元素, 就将这个         两个元素交换.   ...

  2. Java集合排序方法comparable和comparator的总结

    一.概述Comparable和Comparator都是用来实现集合中元素的比较.排序的.Comparable是在集合内部定义的方法实现的排序,位于java.lang下.Comparator是在集合外部 ...

  3. Java ArrayList排序方法详解

    由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在 ...

  4. Java自学-集合框架 Comparator和Comparable

    Java Comparator和Comparable 步骤 1 : Comparator 假设Hero有三个属性 name,hp,damage 一个集合中放存放10个Hero,通过Collection ...

  5. Java集合中Comparator和Comparable接口的使用

    在Java集合中,如果要比较引用类型泛型的List,我们使用Comparator和Comparable两个接口. Comparable接口 -- 默认比较规则,可比较的 实现该接口表示:这个类的实例可 ...

  6. 集合排序 Comparator和Comparable的使用区别

    Java 排序 Compare  Comparator接口 Comparable接口 区别 在Java中使用集合来存储数据时非常常见的,集合排序功能也是常用功能之一.下面看一下如何进行集合排序,常用的 ...

  7. java比较排序Comparable和Comparator

    1       比较排序Comparable和Comparator 1.1      接口作用说明 Comparable和Comparator都是用来实现对象的比较.排序,对比时需要实现Compara ...

  8. Java://Comparator、Comparable的用法(按照要求将set集合的数据进行排序输出):

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; //comparator. ...

  9. Java基础 TreeSet()来实现数组的【定制排序】 : Comparable接口(自然排序) 或者 Comparator接口 (定制排序)

    笔记: //排序真麻烦!没有C++里的好用又方便!ORZ!ORZ!数组排序还还自己写个TreeSet()和( Comparable接口(自然排序) 或者 Comparator接口 (定制排序))imp ...

随机推荐

  1. 完美卸载SQL Server 2008的方案

    转自完美卸载SQL Server 2008的方案 针对SQL数据库卸载不完全的现象,做了如下总结:   1,控制面板 卸载   首先,打开控制面板,按照"安装时间"进行排序,卸载S ...

  2. Freemarker 对null值报错的处理

    忽略null值 假设前提:user.name为null ${user.name},异常 ${user.name!},显示空白 ${user.name!'vakin'},若user.name不为空则显示 ...

  3. 使用jdk生成证书以及把证书导入到jdk中

    证书对于实现此单点登录非常之重要,证书是服务器端和客户端安全通信的凭证,本教程只是演示,所有用了JDK自带的证书生成工具keytool.当然在实际项目中你可以到专门的证书认证中心购买证书. 中文官方网 ...

  4. UML 中关系详解以及在visio中的表示

    http://www.cnblogs.com/kittywei/archive/2013/05/15/3079536.html

  5. 在TMemo上画一条线

    var C:TControlCanvas; begin C := TControlCanvas.Create; C.Pen.Color := clRed; C.Pen.Width := ; C.Con ...

  6. Handler sendMessage 与 obtainMessage (sendToTarget)

    这篇文章讲的很好: http://www.cnblogs.com/android007/archive/2012/05/10/2494766.html 两种用法: 1. private void se ...

  7. C++中new和不new的区别

    我们都知道C++中有三种创建对象的方法,如下: 复制代码代码如下: #include <iostream>using namespace std; class A{private:    ...

  8. 【2015年最新App Store退款流程详解】最详细AppStore退款流程图文教程

    本帖最后由 想吐就吐出来 于 2015-7-1 14:25 编辑 如果你一不小心买错了iOS软件,从App Store上下载了游戏或软件后悔了,那怎么办?可以退款吗?答案是可以的!苹果这点还是很人性化 ...

  9. BZOJ1510: [POI2006]Kra-The Disks

    1510: [POI2006]Kra-The Disks Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 265  Solved: 157[Submit][ ...

  10. oracle 大表删除数据后,回收空间的问题。

    在oracle中由于表结构设计不合理或者需要清楚老数据的时候,经常需要对大表数据进行清理. 一般有一下几种方法: 1. 删除大部分数据,留下小部分数据.我们可以把需要保留的数据转移到别的表,然后再把大 ...