java面向对象2(20) ​​​​​​​排序【重点详解噢】

java面向对象2(20) ​​​​​​​排序【重点详解噢】

 

比较器:

  • 外比较器:Comparator 接口

  • 内比较器:Comparable 接口

 

 

二. Comparator外比较器

实用举例:

/*
* 通过外比较器,进行排序
* 外比较器,建议用匿名内部类,速度更快
* */
public static void main(String[] args) {
    //1、定义集合,填充数据
    ArrayList<Person> plist = new ArrayList<Person>();
    Collections.addAll(plist,
            new Person("小明",18),
            new Person("小望",17),
            new Person("小斯",22));
    System.out.println("小序:"+plist);
    //2、排序: 根据年龄排序
    Collections.sort(plist, new Comparator<Person>() {
        //比较
        //o1-o2  从小到大
        //o2-o1  从大到小
        @Override
        public int compare(Person o1, Person o2) {
            return o2.getAge()-o1.getAge();
        }
    });
    //3、展示
    System.out.println(plist);
}

 

 

三. Comparable内比较器

需要在Person类中实现比较器接口

实用举例:

  1. Person类:

public class Person implements Comparable{
    private String name;
    private int age;

    //比较
    //负数  0   正数
    //从小到大:this - 传入
   //从大到小:传入 - this
    @Override
    public int compareTo(Object o) {
        //根据年龄
        //1、取出当前对象年龄:this.age
        //2、取出传入对象的年龄
        int oage = ((Person)o).getAge();
        //3、返回差值
        return this.age-oage;
    }

}

 

  1. Demo2类:

/*
* 内比较器:
* */
public static void main(String[] args) {
    //1、定义集合,填充数据
    ArrayList<Person> plist = new ArrayList<Person>();
    Collections.addAll(plist,
            new Person("小君",18),
            new Person("小为",17),
            new Person("小培",22));
    System.out.println("小序:"+plist);
    //2、排序: 根据年龄排序
    Collections.sort(plist);
    //3、展示
    System.out.println(plist);
}

 

 

四. 总结

  • 如果一个类在不同题目中以各种方式排序,就用Comparator外比较器

  • 例如:Person类在题目1中用年龄排序

      在题目2中用分数排序

      在题目3中用生日排序

      这时,一道题就要写一个外比较器

     

  • 如果一个类在不同题目中以同一种方式排序,就用Comparable内比较器                 

  •  例如:Person类在题目1、题目2、题目3中 都是用年龄排序,这时,就可以统一在Person类中写一个内比较器

 

 

今日总结:

排序:

比较​​​​​​​

Person

外比较器:修改外部,不会对Person进行修改

Comparator

compare(o1.o2)

从小到大:o1-o2

从大到小:o2-o1

内比较器:修改内部,Person内进行修改

 

 

 

 

 

请给努力中的自己点个赞哦!

每天进步一点点`~~~~~

​​​​​​​