对象排序:Comparator & Comparable(一)

2014-11-24 02:43:12 · 作者: · 浏览: 4

当集合中存储的都是对象时,我们要对其进行排序,就要借助于Comparator或Comparable,以简单的方式实现对象排序或自定义排序。
例子:一个对象类:
Java代码
public class UserPo {
// 名字
private String name;
// 年龄
private int age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}

1:使用Comparator接口实现排序:实现其compare方法,根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数来判断大小。
强行对某个对象 collection 进行整体排序 的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。
import java.util.Comparator;
Java代码

public class MyCompare implements Comparator{

public int compare(Object o0, Object o1) {
UserPo user0 = (UserPo) o0;
UserPo user1 = (UserPo) o1;
if (user0.getAge() > user1.getAge()) {
return 1; // 第一个大于第二个
} else if (user0.getAge() < user1.getAge()) {
return -1;// 第一个小于第二个
} else {
return 0; // 等于
}
}
}

测试代码:
Java代码
import java.util.ArrayList;
import java.util.Collections;

public class Test {

public static void main(String args[]){

String sql="select name,age from users";
// 从数据库中得到数据并组装对象集合
ArrayList array =BaseDao.getyAll(sql);
MyCompare comp = new MyCompare();
// 执行排序方法
Collections.sort(array,comp);
for(UserPo p:array) {
System.out.println(p.getName()+":"+p.getAge());
}

}
}

getAll()方法:
public static ArrayList getyAll(String sql) {
Java代码
ArrayList list = new ArrayList();
ResultSet rs = null;
PreparedStatement ps = null;
try {
Connection con = JdbcUtils.getMsConnection();
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
UserPo p = new UserPo();
p.setName(rs.getString("name"));
p.setAge(rs.getInt("age"));
list.add(p);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;

2:使用Comparable接口完成排序:实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
对UserPo类进行改装
Java代码
import java.util.ArrayList;
import java.util.Collections;
public class UserPo implements Comparable {

private String name;

private int age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
/**
* compareTo
*/
public int compareTo(Object o) {
return this.age-((UserPo)o).getAge();
}