美文网首页
Comparable,Comparator

Comparable,Comparator

作者: 尉昌达 | 来源:发表于2016-07-28 22:25 被阅读17次
    Comparable
    一个实现了Comparable接口的对象的实例可以被用于和相同对象的不同实例做比较。
    它本身需要实现java.lang.Comparable接口。
    Comparator
    一个实现了Comarator接口的对象能够对比不同的对象。
    它不能用于同一个类的不同实例的对比,但是可以用于其他类的实例作比较,必须实现java.util.Compartor。
    

    comparable接口
    是一个直接在实例类里实现的接口,实现后就能支持Collections.sort()、TreeSet和TreeMap的排序了,否则不能作为参数输入。
    大体的意思就是在实例类里就定义了实例对象的排序方法。
    示例:

    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Collections;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;
    
    class Animal implements Comparable<Animal>{
        private String name;
    
        public Animal(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public int compareTo(Animal o) {
            
            return name.length()-o.getName().length();
        }
    
    }
    
    
    public class SetTest1 {
        public static void main(String[] args) {
            Set<Animal> set1 = new HashSet<Animal>();
            
            List<Animal> list1 =new ArrayList<Animal>();
            addElements(set1);
            addElements(list1);
            
            
            Collections.sort(list1);
            
            showElements(set1);
            
            System.out.println();
            
            showElements(list1);
            
            
        }
        public static void addElements(Collection<Animal> col){
            col.add(new Animal("wwwdfg"));
            col.add(new Animal("qqqfg"));
            col.add(new Animal("yyygfdgdfg"));
            col.add(new Animal("eeedfggdfgfgdgdfg"));
        }
        public static void showElements(Collection<Animal> col){
            for(Animal ani :col){
                System.out.println(ani.getName());
            }
        }
    
    }
    
    

    Comparator接口
    是一个在实例类外实现的接口,实现后也能支持Collections.sort()、TreeSet和TreeMap的排序。
    它可以在Collections.sort()、TreeSet()和TreeMap()中以匿名内部类的方式实现排序方法。
    若它的泛型实例类已经实现了Comparable接口,那也是执行Comparator里的方法而忽略Comparable里的方法。
    示例1:

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    class Student implements Comparator<Student>{
        private int id;
        private String name;
        public Student(){
            
        }
        
        public Student(int id,String name){
            this.id=id;
            this.name=name;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        @Override
        public String toString() {
            return "id=" + id + ", name=" + name ;
        }
    //  @Override
    //  public int compareTo(Student student) {
    //      if(id>student.id){
    //          return 1;
    //      }else if(id<student.id){
    //          return -1;
    //      }else{
    //          
    //          return 0;
    //      }
    //  }
        @Override
        public int compare(Student o1, Student o2) {
            // TODO Auto-generated method stub
            return o1.id - o2.id;
        }
        
    }
    
    public class ListTest1 {
        
        public static void main(String[] args){
    //      List<String> a =new ArrayList<String>();
    //      List<String> b =new ArrayList<String>();
    ////        List<String> c = new ArrayList<>();
            List<Student> stus =new ArrayList<Student>();
            
    //      a.add("cat");
    //      a.add("dog");
    //      a.add("pig");
    //      a.add("bear");
    //      
    //      b.add("fish");
    //      b.add("graffle");
    //      b.add("pig");
    //      b.add("bear");
    ////        c=a;
    //      a.retainAll(b);
    //      
    //      for(String i:a){
    //          System.out.println(i);
    //      }
        
            stus.add(new Student(12, "hehe"));
            stus.add(new Student(1,"wei"));
            stus.add(new Student(3,"wang"));
            stus.add(new Student(5,"wangwei"));
            Collections.sort(stus,new Student());
            for(Student stu :stus){
                System.out.println(stu);
            }
            System.out.println(stus);
        }
    
        
    }
    
    

    示例2:

        private ArrayList<Employee> list=new ArrayList<Employee>();
    
    public List<Employee> getTop10SalaryEmployees(){
            Collections.sort(list,new Comparator<Employee>() {
    
                @Override
                public int compare(Employee o1, Employee o2) {
                    return (int) (o1.getSalary()-o2.getSalary());
                }
            });
            return  list.subList(10, 20);
        }
    

    相关文章

      网友评论

          本文标题:Comparable,Comparator

          本文链接:https://www.haomeiwen.com/subject/gunajttx.html