第一种Comparator接口比较器:
User2.java
MyComparator.java
Test.java
第二种 类比较器Comparable
User.java
Test.java
很显示第一种要比第二种灵活。
如果有新的比较方式,只需要传一个比较规则(实现Comparator)。
Collections.sort(List, Comparator);
User2.java
public class User2 {
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;
}
private String name;
private int age;
}
MyComparator.java
import java.util.Comparator;
public class MyComparator implements Comparator{
public int compare(Object o1, Object o2) {
if(null==o1||null==o2){
return -1;
}
User2 u1=(User2) o1;
User2 u2=(User2) o2;
if (u1.getAge() > u2.getAge()) {
return 1; // 第一个大于第二个
} else if (u1.getAge() < u2.getAge()) {
return -1;// 第一个小于第二个
} else {
return 0; // 等于
}
}
}
Test.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// 接口比较器比较,是定义在类的外部的,它不会破坏user2本身
List list = new ArrayList();
User2 u1 = new User2();
u1.setName("aaa");
u1.setAge(10);
list.add(u1);
User2 u2 = new User2();
u2.setName("bbb");
u2.setAge(30);
list.add(u2);
User2 u3 = new User2();
u3.setName("ccc");
u3.setAge(20);
list.add(u3);
Collections.sort(list, new MyComparator());
for (int i = 0; i < list.size(); i++) {
User2 u = (User2) list.get(i);
System.out.println(u.getAge());
}
}
}
第二种 类比较器Comparable
User.java
public class User implements Comparable{
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;
}
private String name;
private int age;
public int compareTo(Object o) {
User u=(User) o;
if(null==u){
return -1;
}
if (this.age > u.getAge()) {
return 1; // 第一个大于第二个
} else if (this.age < u.getAge()) {
return -1;// 第一个小于第二个
} else {
return 0; // 等于
}
}
}
Test.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// 类比较器Comparable
// Comparable是在内部定义的方法实现的排序.它将会改变对象(User)本身
List list = new ArrayList();
User u1 = new User();
u1.setName("aaa");
u1.setAge(10);
list.add(u1);
User u2 = new User();
u2.setName("bbb");
u2.setAge(30);
list.add(u2);
User u3 = new User();
u3.setName("ccc");
u3.setAge(20);
list.add(u3);
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
User u = (User) list.get(i);
System.out.println(u.getAge());
}
}
}
很显示第一种要比第二种灵活。
如果有新的比较方式,只需要传一个比较规则(实现Comparator)。
Collections.sort(List, Comparator);