java面向对象2(20) 排序

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 

排序【重点详解噢】

一. 排序概述

Person根据年龄排序

Student根据学号、成绩排序

Orders根据总金额排序

自己写排序:选择排序:  双层for

比较器:

  • 外比较器: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内进行修改

附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读/书籍书单大全:

(点击右侧 即可打开个人博客内有干货):技术干货小栈
=====>>①【Java大牛带你入门到进阶之路】<<====
=====>>②【算法数据结构+acm大牛带你入门到进阶之路】<<===
=====>>③【数据库大牛带你入门到进阶之路】<<=====
=====>>④【Web前端大牛带你入门到进阶之路】<<====
=====>>⑤【机器学习和python大牛带你入门到进阶之路】<<====
=====>>⑥【架构师大牛带你入门到进阶之路】<<=====
=====>>⑦【C++大牛带你入门到进阶之路】<<====
=====>>⑧【ios大牛带你入门到进阶之路】<<====
=====>>⑨【Web安全大牛带你入门到进阶之路】<<=====
=====>>⑩【Linux和操作系统大牛带你入门到进阶之路】<<=====

天下没有不劳而获的果实,望各位年轻的朋友,想学技术的朋友,在决心扎入技术道路的路上披荆斩棘,把书弄懂了,再去敲代码,把原理弄懂了,再去实践,将会带给你的人生,你的工作,你的未来一个美梦。

发布了61 篇原创文章 · 获赞 17 · 访问量 4190

猜你喜欢

转载自blog.csdn.net/JKX_geek/article/details/104668127