`

java.lang.Comparable 和java.util.Comparator

    博客分类:
  • JAVA
 
阅读更多

一个类实现了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());
  }
 }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics