Comparable与Comparator浅析

518 阅读1分钟

Comparable我称之为内比较,就是在一个实体类中实现该方法,由该实体类对象调用。然后传入另外一个该对象用于比较。

public class Person implements Comparable<Person>{  
  private int age;  
  private String name;  
  private String address;   
     @Override    public int compareTo(Person o) {   
     if(this.age>o.getAge()){       
     return 1;     
     }else {  
      return -1;  
      }    
}  
  public Person(int age, String name, String address) {  
      this.age = age;  
      this.name = name;  
      this.address = address; 
   }   
 public int getAge() { 
       return age; 
   }   
 public void setAge(int age) {
        this.age = age; 
   }  
  public String getName() {
        return name;   
 }   
 public void setName(String name) { 
       this.name = name;  
  }  
  public String getAddress() {  
      return address;  
  }  
  public void setAddress(String address) {  
      this.address = address; 
   }
}

public class Service { 
   public static void main(String[] args) { 
       Person person1 = new Person(10,"lm","aaaa");    
      Person person2 = new Person(20,"po","bbbb");  
      Person person3 = new Person(30,"zj","cccc");   
     Domain domain = new Domain(18);   
     int i = person1.compareTo(person2);
     }
}

Comparator则是外比较,你需要传入两个对象才能完成比较。它比Comparable更灵活的一点是可以完成不对类对象之间的比较:

public class Domain {   
 private int  num;  
  public int getNum() { 
       return num;  
  }   
 public void setNum(int num) {  
      this.num = num; 
   } 
 public Domain(int num) {  
      this.num = num;  
  }   
 public Domain() {
    }
}

public class DomainComparator implements Comparator{ 
   @Override  
  public int compare(Object o1, Object o2) {  
      Domain  domain= (Domain)o1;  
      Person person=(Person)o2;     
   if(domain.getNum()>person.getAge()){ 
           return -1;    
   }else {      
      return 1;   
     }   
 }
}

public class Service {   
 public static void main(String[] args) { 
    Person person1 = new Person(10,"lm","aaaa");   
    Domain domain = new Domain(18);   
    int i = person1.compareTo(person2); 
    System.out.println(i);    
    DomainComparator domainComparator = new DomainComparator();  
    int compare = domainComparator.compare(domain, person1);   
    System.out.println("compare"+compare); 
   }
}