求解Comparator跟Comparable
求解Comparator和Comparable
Comparator接口,实现此接口的类就是一个排序器,Arrays和Collections都能在sort()方法的参数中指明排序方式,即实现Comparator接口的类的示例。
User类:
ComparatorUser类;
结果:
这里的ComparatorUser就是一个排序器。只不过我将测试代码写在此类里边了。
写在外边的情况,User类不变,
ComparatorUser类:
测试类:
输出结果:
实现Comparable接口的类在进行排序时,就会默认对其用自身的排序机制进行排序。
结果:
总结:
Comparator是排序器,是一种规则,
实现Comparable接口,就说明,某个类有自己定义的排序规则。
如果对已经实现Comparable的类进行指定排序器的话,编译就会出错。
Comparator接口,实现此接口的类就是一个排序器,Arrays和Collections都能在sort()方法的参数中指明排序方式,即实现Comparator接口的类的示例。
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的类进行指定排序器的话,编译就会出错。