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);
        }
    }
  • 相关阅读:
    627. Swap Salary
    176. Second Highest Salary
    596. Classes More Than 5 Students
    183. Customers Who Never Order
    181. Employees Earning More Than Their Managers
    182. Duplicate Emails
    175. Combine Two Tables
    620. Not Boring Movies
    595. Big Countries
    HDU 6034 Balala Power! (贪心+坑题)
  • 原文地址:https://www.cnblogs.com/mcahkf/p/8607960.html
Copyright © 2011-2022 走看看