java List排序方法 Comparator和Comparable

今天写的一个程序中需要对一个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来实现排序,而无需修改已实现的类。

时间: 2024-10-11 19:36:23

java List排序方法 Comparator和Comparable的相关文章

Java ArrayList排序方法详解

由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在添加和移除元素的时候进行动态的扩展和缩减.你可能已经使用过 ArrayList,因此我将略过基础部分.如果你对 ArrayList 还不熟悉,你可以参考它的 API 文档,可以很容易理解在 ArrayList 上执行基本的操作.In this post, I will discuss one of

java 常见排序方法比较

1.冒泡排序 从第一个元素开始依次i与i+1元素相比较,若i元素较大,则交换两元素.这样一趟下来最大的元素就到了队尾,第二趟则从第一个元素比到第n-1个元素,这样倒数第二个元素就是从第一个到n-1个元素里最大的.以此类推,经过n-1趟,要比较n-1+n-2+...+1次,故时间复杂度=n*(n-1)/2,为O(n^2). 1 public class Sort { 2 public void BubbleSort(int n,int a[]) { 3 for (int k = n - 1; k

java集合排序方法sort的使用

转自  http://blog.csdn.net/a1165117473/article/details/6965652 /** To change this template, choose Tools | Templates* and open the template in the editor.*/ package com.city.test; import java.util.Arrays;import java.util.Comparator;/**** @author LiuB*/

Java一般排序方法,有一定的局限性。

例: public static void main(String[] args) {   int[] a ={3,1,4,22,0};    Arrays.sort(a);    for (int i = 0; i < a.length; i++){    System.out.print(a[i]+" ");   } }

java排序方法

1.java常用排序方法 1) 选择排序         原理:a. 将数组中的每个元素,与第一个元素比较          如果这个元素小于第一个元素, 就将这个         两个元素交换.         b. 每轮使用a的规则, 可以选择出一个最小元素          放到第一个位置.       c. 经过n-1轮比较完成排序   简单说: 每轮选择最小的放到前面.   原理说明:   ary={8,2,3,7,1}    ary={1|8,3,7,2}   ary={1,2|8,

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

import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; //comparator.comparable的用法(按照要求将map集合的键值对进行顺序输出) import java.util.List; public class Test { public static <T> void sop(T t) { System.out.println(t); } public stat

Comparator and Comparable in Java

Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法.Comparator位于包java.util下,而Comparable位于包java.lang下Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 String.

Java的Comparator和Comparable对比

1.对象如何对比排序? Java的基本类型如int, float, double都可以直接使用java.util.Arrays.sort(Object[])对比排序,那对象是如何比较排序的呢?我们定义的类都是继承Object类的,Object类的equals的方法,默认是比较两个对象是否相等(hashcode相同) public boolean equals(Object obj) { return (this == obj); } 而我们现实要求一般不是这样比较,可以通过实现Comparabl

JAVA Collections工具类sort()排序方法

主要分析内容: 一.Collections工具类两种sort()方法 二.示例 一.Collections工具类两种sort()方法 格式一: public static <T extends Comparable<? super T>> void sort(List<T> list) 说明:该方法中的泛型<T>都是Comparable接口的子类,即只有是Comparable接口子类类型的数据,才能进行比较排序.如果其他类型的数据要进行比较排序,必须继承Co