Comparator接口,实现此接口的类就是一个排序器,Arrays和Collections都能在sort()方法的参数中指明排序方式,即实现Comparator接口的类的示例。
User类:
ComparatorUser类;
结果:
这里的ComparatorUser就是一个排序器。只不过我将测试代码写在此类里边了。
写在外边的情况,User类不变,
ComparatorUser类:
测试类:
输出结果:
实现Comparable接口的类在进行排序时,就会默认对其用自身的排序机制进行排序。
结果:
总结:
Comparator是排序器,是一种规则,
实现Comparable接口,就说明,某个类有自己定义的排序规则。
如果对已经实现Comparable的类进行指定排序器的话,编译就会出错。
User类:
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
}
ComparatorUser类;
import java.util.Arrays;
import java.util.Comparator;
public class ComparatorUser implements Comparator<User> {
/**
* @param args
*/
public static void main(String[] args) {
User[] users = new User[] { new User("1", 15), new User("2", 19), new User("3", 17) };
for(User user : users) {
System.out.println(user.getName() + ":" + user.getAge());
}
Arrays.sort(users, new ComparatorUser());
for(User user : users) {
System.out.println(user.getName() + ":" + user.getAge());
}
}
@Override
public int compare(User user1, User user2) {
return ((User) user1).getAge() - ((User) user2).getAge();
}
}
结果:
1:15
2:19
3:17
1:15
3:17
2:19
这里的ComparatorUser就是一个排序器。只不过我将测试代码写在此类里边了。
写在外边的情况,User类不变,
ComparatorUser类:
import java.util.Comparator;
public class ComparatorUser implements Comparator<User> {
@Override
public int compare(User user1, User user2) {
return ((User) user1).getAge() - ((User) user2).getAge();
}
}
测试类:
import java.util.Arrays;
public class ComparatorTest {
/**
* @param args
*/
public static void main(String[] args) {
User[] users = new User[] { new User("jin", 18),
new User("gui", 19), new User("jin", 15),
new User("chao", 20) };
for(User user : users) {
System.out.println(user.getName() + ": " + user.getAge());
}
Arrays.sort(users, new ComparatorUser());
for(User user : users) {
System.out.println(user.getName() + ": " + user.getAge());
}
}
}
输出结果:
jin: 18
gui: 19
jin: 15
chao: 20
jin: 15
jin: 18
gui: 19
chao: 20
实现Comparable接口的类在进行排序时,就会默认对其用自身的排序机制进行排序。
import java.util.Arrays;
public class ComparableUser implements Comparable<ComparableUser> {
private String name;
private int age;
public ComparableUser(String name, int age) {
this.age = age;
this.name = name;
}
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;
}
/**
* @param args
*/
public static void main(String[] args) {
ComparableUser[] users = new ComparableUser[] { new ComparableUser("jin", 15), new ComparableUser("gui", 19), new ComparableUser("chao", 18), new ComparableUser("jin", 17) };
for(ComparableUser user : users) {
System.out.println(user.getName() + ":" + user.getAge());
}
Arrays.sort(users);
for(ComparableUser user : users) {
System.out.println(user.getName() + ":" + user.getAge());
}
}
@Override
public int compareTo(ComparableUser user) {
if(this.name.compareTo(user.getName()) != 0) {
return this.name.compareTo(user.getName());
}
return this.age - user.age;
}
}
结果:
jin:15
gui:19
chao:18
jin:17
chao:18
gui:19
jin:15
jin:17
总结:
Comparator是排序器,是一种规则,
实现Comparable接口,就说明,某个类有自己定义的排序规则。
如果对已经实现Comparable的类进行指定排序器的话,编译就会出错。