Comparable,Comparator

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{
    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 set1 = new HashSet();
        
        List list1 =new ArrayList();
        addElements(set1);
        addElements(list1);
        
        
        Collections.sort(list1);
        
        showElements(set1);
        
        System.out.println();
        
        showElements(list1);
        
        
    }
    public static void addElements(Collection 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 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{
    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 a =new ArrayList();
//      List b =new ArrayList();
////        List c = new ArrayList<>();
        List stus =new ArrayList();
        
//      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 list=new ArrayList();

public List getTop10SalaryEmployees(){
        Collections.sort(list,new Comparator() {

            @Override
            public int compare(Employee o1, Employee o2) {
                return (int) (o1.getSalary()-o2.getSalary());
            }
        });
        return  list.subList(10, 20);
    }

你可能感兴趣的:(Comparable,Comparator)