【List、Set、数据结构、Collections】-Collections

day03 【List、Set、数据结构、Collections】

5.3 简述Comparable和Comparator两个接口的区别。

Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

5.4 练习

创建一个学生类,存储到ArrayList集合中完成指定排序操作。

Student 初始类

public class Student{
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
    }
}

测试类:

public class Demo {

    public static void main(String[] args) {
        // 创建四个学生对象 存储到集合中
        ArrayList<Student> list = new ArrayList<Student>();

        list.add(new Student("rose",18));
        list.add(new Student("jack",16));
        list.add(new Student("abc",16));
        list.add(new Student("ace",17));
        list.add(new Student("mark",16));


        /*
          让学生 按照年龄排序 升序
         */
//        Collections.sort(list);//要求 该list中元素类型  必须实现比较器Comparable接口


        for (Student student : list) {
            System.out.println(student);
        }


    }
}

发现,当我们调用Collections.sort()方法的时候 程序报错了。

原因:如果想要集合中的元素完成排序,那么必须要实现比较器Comparable接口。

于是我们就完成了Student类的一个实现,如下:

public class Student implements Comparable<Student>{
    ....
    @Override
    public int compareTo(Student o) {
        return this.age-o.age;//升序
    }
}

再次测试,代码就OK 了效果如下:

Student{name='jack', age=16}
Student{name='abc', age=16}
Student{name='mark', age=16}
Student{name='ace', age=17}
Student{name='rose', age=18}

5.5 扩展

如果在使用的时候,想要独立的定义规则去使用 可以采用Collections.sort(List list,Comparetor c)方式,自己定义规则:

Collections.sort(list, new Comparator<Student>() {
    @Override
    public int compare(Student o1, Student o2) {
        return o2.getAge()-o1.getAge();//以学生的年龄降序
    }
});

效果:

Student{name='rose', age=18}
Student{name='ace', age=17}
Student{name='jack', age=16}
Student{name='abc', age=16}
Student{name='mark', age=16}

如果想要规则更多一些,可以参考下面代码:

Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                // 年龄降序
                int result = o2.getAge()-o1.getAge();//年龄降序

                if(result==0){//第一个规则判断完了 下一个规则 姓名的首字母 升序
                    result = o1.getName().charAt(0)-o2.getName().charAt(0);
                }

                return result;
            }
        });

效果如下:

Student{name='rose', age=18}
Student{name='ace', age=17}
Student{name='abc', age=16}
Student{name='jack', age=16}
Student{name='mark', age=16}

相关推荐

  1. 【List、Set、数据结构Collections】-Collections

    2024-03-17 05:58:07       19 阅读
  2. List、Set、数据结构Collections-笔记

    2024-03-17 05:58:07       21 阅读
  3. 第八章 List、Set、数据结构Collections

    2024-03-17 05:58:07       35 阅读
  4. Collections.singletonList

    2024-03-17 05:58:07       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-17 05:58:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-17 05:58:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-17 05:58:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-17 05:58:07       20 阅读

热门阅读

  1. 数据结构的概念大合集05(串)

    2024-03-17 05:58:07       15 阅读
  2. 这是二叉搜索树吗?

    2024-03-17 05:58:07       22 阅读
  3. 【MySql】MySql常用语句都有哪些

    2024-03-17 05:58:07       18 阅读
  4. 剑指offer面试题36 数组中的逆序对

    2024-03-17 05:58:07       20 阅读
  5. 【vue2源码】模版编译

    2024-03-17 05:58:07       18 阅读
  6. ChatGPT团队:介绍OpenAI团队生产力提升工具

    2024-03-17 05:58:07       19 阅读
  7. [蓝桥杯 2014 省 A] 波动数列

    2024-03-17 05:58:07       18 阅读
  8. 前端小白的学习之路(HTML5 一)

    2024-03-17 05:58:07       18 阅读
  9. HTML5

    HTML5

    2024-03-17 05:58:07      19 阅读
  10. Redis

    Redis

    2024-03-17 05:58:07      16 阅读