今天遇到需要对List进行排序的需求,虽然自己可以写算法实现排序,但是追求效率还是选择最常用的Java自带的方法进行排序,主要是利用Collections.sort(Object o,Comparator c),代码如下:
package com.wistron.ets.wh.edu.ass.core.common;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* @ClassName: TestList
* @Description: TODO(这里用一句话描述这个类的作用)
* @author WH1405010 杨孙
* @date 2014年11月5日 下午2:59:30
*
*/
public class TestList {
public static void main(String[] args) {
// 测试数据
Test t1 = new Test(6, "A1");
Test t2 = new Test(1, "A2");
Test t3 = new Test(3, "A3");
Test t4 = new Test(4, "A6");
Test t5 = new Test(4, "A5");
Test t6 = new Test(4, "A4");
List list = new ArrayList();
list.add(t1);
list.add(t2);
list.add(t3);
list.add(t4);
list.add(t5);
list.add(t6);
// 排序,通过泛型和匿名类来实现
Collections.sort(list, new Comparator() {
public int compare(Test o1, Test o2) {
// 首先按照Id排序
int result = o1.getId() - o2.getId();
// Id相同时按照Name排序
if (result == 0) {
result = o1.getName().compareTo(o2.getName());
// System.out.println(result);
}
return result;
}
});
// 打印结果
for(Test test : list){
System.out.println("id=" + test.getId() + ";name=" + test.getName());
}
}
}
// 测试的内部类
class Test {
private int id;
private String name;
public Test(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
打印结果如下:
id=1;name=A2
id=3;name=A3
id=4;name=A4
id=4;name=A5
id=4;name=A6
id=6;name=A1
在本例中
new Comparator()可以写成内部类的形式,如果需求的排序比较复杂的话。另外,排序的另一种实现方式是让需要排序的类实现Comparable接口,然后调用以下代码:
Collections.sort(list);