zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    Max关闭WPF
    InstallShield安装过程介绍
    InstallShield相关资料整理
    .net reflection的一点研究
    (转)VMware增加磁盘容量方法
    领域驱动设计《读书笔记》
    《领域驱动设计C#2008实现》读书笔记
    深入研究c++对象模型
    <转载>com之包容聚合
    基于插件开发的架构研究
  • 原文地址:https://www.cnblogs.com/mcahkf/p/8607960.html
Copyright © 2011-2022 走看看