本文主要介绍Java常用的排序方法:Arrays.sort()、Collections.sort()
这两种方法的使用方法基本相同,不同的是Collections.sort()只能对对象容器排序,而Arrays.sort()只能对数组进行排序,数组可以是基本类型数组和对象数组。下面用Collection.sort()举例,Arrays.sort()类似。
Collections.sort()有如下两种形式:
1. public static
sort对容器直接排序的前提是该容器的元素要实现Comparable接口,对于常用的基本类型的包装类型如Integer、Long等类和String类都已经实现了Comparable,所以可以直接用Collections.sort(list)进行排序。要实现Comparable接口只需要实现compareTo()方法(因为Comparable只有一个方法)。如果容器的对象并没有实现Comparable接口或者已经实现了但是要按照自定义方法进行排序,这里就要用到Collections.sort()的另一种形式,如下。
2. public static
此方法可以实现自定义排序,而且比一种方法灵活,只要指定相应的比较器可以灵活使用多种排序机制。使用方法如下:
MyComparator c =new MyComparator();
Collections.sort(list,c);
其中MyComparator必须实现Comparator接口
示例:
import java.util.*;
public class MyCompatorDemo {
public static void main(String[] args) {
List list1 = new ArrayList();
list1.add(new MyClass("a", 1));
list1.add(new MyClass("b", 2));
list1.add(new MyClass("c", 3));
list1.add(new MyClass("d", 4));
list1.add(new MyClass("e", 5));
//按照MyClass内部的compareTo方法进行排序
Collections.sort(list1);
//输出
for(MyClass myClass : list1){
System.out.println(myClass.name + " " + myClass.id);
}
//初始化序列
List list2 = Arrays.asList(1, 2, 3, 4, 5, 3);
//使用默认排序方式(升序)
Collections.sort(list2);
System.out.println(list2);
//使用自定义排序方式(降序)
MyComparator c = new MyComparator();
Collections.sort(list2, c);
System.out.println(list2);
}
}
class MyClass implements Comparable{
String name = "";
int id = 0;
MyClass(){
}
MyClass(String name, int id){
this.name = name;
this.id = id;
}
@Override
public int compareTo(Object o) {
MyClass myClass = (MyClass) o;
return 0 - this.name.compareTo(myClass.name);
}
}
//实现Comparator的类
class MyComparator implements Comparator {
@Override
public int compare(Integer a, Integer b){
return b - a;
}
}
e 5
d 4
c 3
b 2
a 1
[1, 2, 3, 3, 4, 5]
[5, 4, 3, 3, 2, 1]
注意: