zoukankan      html  css  js  c++  java
  • Comparator接口Comparable接口 排序接口的使用方式

    Comparator比较器

    Comparator接口在java.util包下面,排序是Comparator需要实现的功能之一,该接口代表的是一个比较器,比较器具有可比性,可以做排序的,,本质其实比较两个对象谁排在前边谁排在后面,那么比较的方法是

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

    简单来说就是一些集合或者工具类自身实现了Comparable接口,arrays和collections两个工具类中就拥有了调用排序的方法,内部的sort方法就可以排序,但是一旦集合中放置的是类类型,此时的sort方法就不能使用了,我们需要自定义规则

    自定义规则进行排序

    代码如下

     ArrayList<String> list= new ArrayList<>();
        list.add("abc");
        list.add("cba");
        list.add("bca");
      Collections.sort(list,new Comparator(){
        @Override
            public int compare(String o1,String o2){
     return o2.charAt(0)-01.charAt(0);
            }
        });
    (一般我们都需要在自定的类中实现Comparator接口来重写它的compare方法,当然我们也可以调用Collections工具类中的sort方法的时候new出一个规则对象来临时重写一个如: Collections.sort(list.new Comparator(){}),他时可以一种很灵活的自定义的排序接口
    类类型中的属性众多我们想要排序怎么办.所以我们可以使用Comparator接口来临时创建出规则
     ArrayList<Student> list=new ArrayList<>();
      list.add(new Student("tom,20"));
        list.add(new Student("lily,18"));
     Collections.sort(list.new Comparator(){
               @Override
          public int compare(Student 01,Student o2){
             int num=  o1.getAge()-o2.getAge();
              if(num==0){
                  num=o2.getName().charAt(0)-o1-getName()-charAt(0);
              }
              return num;//负数 0 正数 都代表着交换规则
  • 相关阅读:
    马的遍历 new
    锤子剪刀布 new
    npm 打包 new
    Linux 锁机制
    ubuntu virtualbox 下安装xp,识别usb
    ubuntu设置快捷键
    linux神奇的系统请求系统救命草
    linux 内核动态内存分配测试(纯属娱乐哈)
    C之绝妙(一道很NB的面试题)
    虚拟机virtualbox:Could not find an open hard disk with UUID {368441269e88468698582d1a0568f53c}.
  • 原文地址:https://www.cnblogs.com/rosiness/p/14117999.html
Copyright © 2011-2022 走看看