zoukankan      html  css  js  c++  java
  • Comparator比较器 、Comparable接口

    Comparator接口比较器

     Collections工具集中的sort()
     public static <T> void sort(List<T> list)     
     public static <T> void sort(List<T> list,Comparator<? super T> c)     
    

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

    public int compare(Object o1,Object o2):比较两个参数的的顺序
        两个对象比较的结果有三种:大于,等于,小于
        如果要按照升序排序:则o1小于o2返回(负数),相等返回0,o1大于o2返回(正数)
        如果要按照降序排序:则o1小于o2返回(正数),相等返回0,o1大于o2返回(负数)
        简化操作:
        		升序排序: o1-o2
                 降序排序: o2-o1
    
    public static void main(String[] args) {
        //public static <T> void sort(List<T> list)     
        ArrayList<String> list = new ArrayList<>();
        list.add("abc");
        list.add("cba");
        list.add("bca");
        list.add("sba");
        list.add("nba");
        // 排序规则,按照字符串的第一个字母降序排序
        // 使用接口中的方法:
        // public static <T> void sort(List<T> list,Comparator<? super T> c)  
        // public int compare(Object o1,Object o2):比较两个参数的的顺序
        Collections.sort(list,new Comparator(){
            @Override
    		public int compare(String o1,Strng o2) {
                /*if(o2.charAt(0) - o1.charAt(0) > 0){
                    return 1;
                } else if ( o2.charAt(0) - o1.charAt(0) == 0){
                    return 0;
                } else {
                    return -1;
                }*/
                return o2.charAt(0) - o1.charAt(0);
            }
        });
        System.out.println(list);
    }
    // 控制台结果:
    [sba,nba,cba,bca,abc]
    
    简述Comparable和Comparator两个接口的区别

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

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

    public class Student{
        private String name;
        private int age;
        // get和set方法
        // toString方法
        // 无参构造和全参构造
    }
    public class MainClass {
        public static void main(String[] args) {
            // 假如学生都是老外 名字都是字母
            ArrayList<Student> list = new ArrayList<>();
            list.add(new Student("tom",20));
            list.add(new Student("lily",18));
            list.add(new Student("jack",26));
            list.add(new Student("rose",40));
            list.add(new Studeng("smith",26));
            // 按照年龄升序排序
            // 如果年龄相同的话,然后按照姓名排序,按照姓名的首字母降序排序
            Collections.sort(list,new Comparator(){
                @Override
                public int compare(Student o1,Student o2) {
                   int num  = o1.getAge() - o2.getAge();
                    if( num == 0) {
                        num = o2.getName().charAt(0) - o1.getName().charAt(0);
                    }
                       return num;
                }
            })
            System.out.println(list);  
        }  
    }
    // 控制台输出的结果:
    [Student("lily",18),Student("tom",20),Student("jack",26),Student("rose",40)]
    // 二次控制台输出结果:
    [Student("lily",18),Student("tom",20),Studeng("smith",26),Student("jack",26),Student("rose",40)]
    
    
  • 相关阅读:
    3 聊天室
    freemaker分页模板
    [三]ajax重要属性
    [二]java运行原理
    [转]freemaker格式化日期
    [二]SpringMvc实践-注解
    win7下禁用ctrl alt del +上下左右键
    [一]初识SpringMVC
    Powerdesigner设置name与code不同时变化
    Ubuntu下缓冲器溢出攻击实验(可以看看问题分析)
  • 原文地址:https://www.cnblogs.com/luayan/p/14131961.html
Copyright © 2011-2022 走看看