• Comparable和Comparator接口


    Comparable 是排序接口;若一个类实现了 Comparable 接口,就意味着 “该类支持排序”。而 Comparator 是比较器;我们若需要控制某个类的次序,可以建立一个 “该类的比较器” 来进行排序。

    1.若一个类实现了Comparable 接口,实现 Comparable 接口的类的对象的 List 列表 ( 或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。

    public class Person1 implements Comparable<Person1>  
    {  
        private int age;  
        private String name;  
      
        public Person1(String name, int age)  
        {  
            this.name = name;  
            this.age = age;  
        }  
        @Override  
        public int compareTo(Person1 o)  
        {  
           // return this.age-o.age; //升序
            return o.age-this.age; //降序
        }  
        @Override   
        public String toString()  
        {  
            return name+":"+age;  
        }  
    }  
    public class Test {
        
        public static void main(String[] args) {
            Person1 person1 = new Person1("zzh",18);  
            Person1 person2 = new Person1("jj",17);  
            Person1 person3 = new Person1("qq",19);  
       
            List<Person1> list = new ArrayList<>();  
            list.add(person1);  
            list.add(person2);  
            list.add(person3);  
       
            Collections.sort(list);  
            System.out.println(list);  
            
            Person1[] a={person1,person2,person3};
            Arrays.sort(a);
            System.out.println(a[0]);
        }
    }

    2.对类自身无法修改这就用到了Comparator这个接口(策略模式)。

        public final class Person2  
        {  
            private int age;  
            private String name;  
          
            public Person2(String name, int age)  
            {  
                this.name = name;  
                this.age = age;  
            }  
          
            @Override   
            public String toString()  
            {  
                return name+":"+age;  
            }  
          
            //getter and setter方法省略....  
        }  
    public class Test {
        public static void main(String[] args) {
            Person2 p1 = new Person2("zzh", 18);
            Person2 p2 = new Person2("jj", 17);
            Person2 p3 = new Person2("qq", 19);
            List<Person2> list2 = new ArrayList<Person2>();
            list2.add(p1);
            list2.add(p2);
            list2.add(p3);
    
            Collections.sort(list2, new Comparator<Person2>() {
                @Override
                public int compare(Person2 o1, Person2 o2) {
                    if (o1 == null || o2 == null)
                        return 0;
                    return o1.getAge() - o2.getAge();
                }
            });
            System.out.println(list2);
        }
    }
  • 相关阅读:
    Symbol Commands
    Control Structures
    script.stub
    Lowest Common Ancestor of a Binary Search Tree
    Move Zeroes
    Odd Even Linked List
    ubuntu18.04系统安装及php7.2,apache2,mysql8,git,svn,composer,vs code 到安装 php 扩展配置php.ini 实现 laravel5.8 运行
    thinkphp3.2.3 自定义路由实践
    thinkphp3.2.3 自动验证 unique 出错的解决办法
    【重磅】中国集成电路产业基金投资版图详解
  • 原文地址:https://www.cnblogs.com/mcahkf/p/8607960.html
Copyright © 2020-2023  润新知