zoukankan      html  css  js  c++  java
  • Java中Comparable和Comparator实现对象比较

    1.通过Comparable实现排序

    复制代码
    package Comparable;
    
    import java.util.Arrays;
    
    public class ComparableUser implements Comparable<ComparableUser> 
    {
    
        private String id;
        private int age;
    
        public ComparableUser(String id, int age) {
            this.id = id;
            this.age = age;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public int compareTo(ComparableUser o) {
             return this.age - o.getAge();
             //return ((ComparableUser) o).getAge() - this.age;
        }
    
        /**
         * 测试方法
         */
        public static void main(String[] args) {
            ComparableUser[] users = new ComparableUser[] {
                    new ComparableUser("u1001", 25),
                    new ComparableUser("u1002", 20),
                    new ComparableUser("u1003", 21) };
            Arrays.sort(users);// 对对象进行排序
            for (int i = 0; i < users.length; i++) {
                ComparableUser user = users[i];
                System.out.println(user.getId() + " " + user.getAge());
            }
        }
    
    }
    复制代码

    2.通过实现Comparator进行排序

    复制代码
    package Comparable;
    
    import java.util.Arrays;
    import java.util.Comparator;
    
    class User {  
        
        private String id;  
        private int age;  
      
        public User(String id, int age) {  
            this.id = id;  
            this.age = age;  
        }  
      
        public int getAge() {  
            return age;  
        }  
      
        public void setAge(int age) {  
            this.age = age;  
        }  
      
        public String getId() {  
            return id;  
        }  
      
        public void setId(String id) {  
            this.id = id;  
        }  
    }
    
    public class UserComparator implements Comparator {  
          
        public int compare(Object arg0, Object arg1) {  
            return ((User) arg0).getAge() - ((User) arg1).getAge();  
        }  
      
        /** 
         * 测试方法 
         */  
        public static void main(String[] args) {  
            User[] users = new User[] { new User("u1001", 25),  
                    new User("u1002", 20), new User("u1003", 21) };  
            Arrays.sort(users, new UserComparator());  
            for (int i = 0; i < users.length; i++) {  
                User user = users[i];  
                System.out.println(user.getId() + " " + user.getAge());  
            }  
        }
    
    }  
    复制代码

    推荐使用案例:

    复制代码
    package Comparable;
    
    import java.util.Arrays;
    import java.util.Comparator;
    
    class User {
    
        private String id;
        private int age;
        private int score;
    
        public User(String id, int age, int score) {
            this.id = id;
            this.age = age;
            this.setScore(score);
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public int getScore() {
            return score;
        }
    
        public void setScore(int score) {
            this.score = score;
        }
    }
    
    public class UserComparator implements Comparator<User> {
    
        public int compare(User arg0, User arg1) {
            if(arg0.getAge()<arg1.getAge())
                return 1;
            else if(arg0.getAge()>arg1.getAge())
                return -1;
            else if(arg0.getScore()<arg1.getScore())
                return -1;
            else if(arg0.getScore()>arg1.getScore())
                return 1;
            return 0;
        }
    
        /**
         * 测试方法
         */
        public static void main(String[] args) {
            User[] users = new User[] { 
                    new User("u1001", 25, 90), new User("u1002", 20, 100), new User("u1003", 25, 91) };
            Arrays.sort(users, new UserComparator());
            for (int i = 0; i < users.length; i++) {
                User user = users[i];
                System.out.println(user.getId() + " " + user.getAge() + " " + user.getScore());
            }
        }
    
    }
    复制代码
  • 相关阅读:
    poj 3616 Milking Time
    poj 3176 Cow Bowling
    poj 2229 Sumsets
    poj 2385 Apple Catching
    poj 3280 Cheapest Palindrome
    hdu 1530 Maximum Clique
    hdu 1102 Constructing Roads
    codeforces 592B The Monster and the Squirrel
    CDOJ 1221 Ancient Go
    hdu 1151 Air Raid(二分图最小路径覆盖)
  • 原文地址:https://www.cnblogs.com/nele/p/4830870.html
Copyright © 2011-2022 走看看