首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java.lang.Comparable 跟java.util.Comparator

2012-09-27 
java.lang.Comparable 和java.util.Comparator一个类实现了java.lang.Comparable接口表明这个类的对象之间

java.lang.Comparable 和java.util.Comparator

一个类实现了java.lang.Comparable接口表明这个类的对象之间是可以进行相互比较的,这个类对象组成的集合就可以直接使用Collections.sort()方法排序。

java.util.Comparator可看成是算法的实现,将算法和数据分离,可在以下两种环境下使用:

1.类的设计师没有考虑到比较问题而没有实现Comparable接口,可以通过Comparator排序而不用改变对象本身

2.可以使用多种排序标准,升序,降序

?

第一种方法:实现java.lang.Comparator接口进行排序

?

public class User implements Comparable{
?private String name;
?private int age;
?private String address;
?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;
?}
?public String getAddress() {
??return address;
?}
?public void setAddress(String address) {
??this.address = address;
?}
?public int compareTo(Object o) {
??// TODO Auto-generated method stub
??User user = (User)o;
??if (age > user.getAge()){
???return 1;
??} else if (age == user.getAge()){
???return 0;
??} else {
???return -1;
??}
?}
}

?

public class ComparableTest {
?
?@SuppressWarnings("unchecked")
?@Test
?public void comparable(){
??List<User> userList = new ArrayList<User>();
??User user = new User();
??user.setAddress("北京");
??user.setAge(15);
??user.setName("张三");
??userList.add(user);
??user = new User();
??user.setAddress("上海");
??user.setAge(25);
??user.setName("李四");
??userList.add(user);
??user = new User();
??user.setAddress("广州");
??user.setAge(18);
??user.setName("王五");
??userList.add(user);
??user = new User();
??user.setAddress("香港");
??user.setAge(35);
??user.setName("马六");
??userList.add(user);
??
??Collections.sort(userList);
??for (User u:userList){
???System.out.println(u.getAge()+","+u.getName()+","+u.getAddress());
??}
?}
}

?

第二种方法: 定义比较算法,实现java.util.Comparator接口

?

public class User {
?private String name;
?private int age;
?private String address;
?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;
?}
?public String getAddress() {
??return address;
?}
?public void setAddress(String address) {
??this.address = address;
?}
}

?

public class NewComparator implements Comparator<User>{
?public int compare(User user1, User user2) {
??// TODO Auto-generated method stub
??if (user1.getAge() > user2.getAge()){
???return 1;
??} else if (user1.getAge() == user2.getAge()){
???return 0;
??} else {
???return -1;
??}
?}
}

?

public class ComparatorTest {
?
?@SuppressWarnings("unchecked")
?@Test
?public void comparatorTest(){
??List<User> userList = new ArrayList<User>();
??User user = new User();
??user.setAddress("北京");
??user.setAge(15);
??user.setName("张三");
??userList.add(user);
??user = new User();
??user.setAddress("上海");
??user.setAge(25);
??user.setName("李四");
??userList.add(user);
??user = new User();
??user.setAddress("广州");
??user.setAge(18);
??user.setName("王五");
??userList.add(user);
??user = new User();
??user.setAddress("香港");
??user.setAge(35);
??user.setName("马六");
??userList.add(user);
??
??Collections.sort(userList,new NewComparator());
??for (User u:userList){
???System.out.println(u.getAge()+","+u.getName()+","+u.getAddress());
??}
?}
}

热点排行