zoukankan      html  css  js  c++  java
  • java中compareTo和compare方法之比较,集合中对象的比较

    前言

    转自:http://www.cnblogs.com/yueliming/archive/2013/05/22/3092576.html

    (这里做了一些小改动)

    一直一来对集合中对象的比较方案,有些模糊,这里做些总结:

    有两个方法可以实现:

    1. 让 Student 实现Comparable接口:

    compareTo(Object o)方法是java.lang.Comparable<T>接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comparable<T>接口的,必须重写public int compareTo(T o)方法。

    2. 实例化一个比较器:

    compare(Object o1,Object o2)方法是java.util.Comparator<T>接口的方法,它实际上用的是待比较对象的compareTo(Object o)方法。

    注意:两者对于比较此对象与指定对象的顺序:如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数:

    返回整数,1,-1,0;返回1表示大于,返回-1表示小于,返回0表示相等。

    代码

    1. 实现Comparable接口:

    package com.horizon.action;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class Student implements Comparable {
    
        private int id;
        private int age;
        private String name;
    
        public Student(int id) {
            this.id = id;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public static void main(String args[]) {
            List<Student> list = new ArrayList<Student>();
            for (int i = 1000; i > 0; i--) {
                list.add(new Student(i));
            }
    
            Collections.sort(list);
    
            for (Student s : list) {
                System.out.println(s.getId());
            }
        }
    
        public int compareTo(Object o) {
            if (o instanceof Student) {
                Student s = (Student) o;
                if (this.id > s.id) {
                    return 1;
                } else {
                    return 0;
                }
            }
            return -1;
        }
    
    }

    2. 实例化一个比较器MenuComparator:

    package com.horizon.action;
    
    import java.util.Comparator;
    
    public class MenuComparator implements Comparator {
    
        public int compare(Object o1, Object o2) {
            if (null != o1 && null != o2) {
                Menu menu1 = (Menu) o1;
                Menu menu2 = (Menu) o2;
                if (menu1.getId() > menu2.getId()) {
                    return 1;
                } else {
                    return 0;
                }
            }
            return 0;
        }
    
    }
    package com.horizon.action;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class Menu {
    
        private int id;
        private int age;
        private String name;
    
        public Menu(int id) {
            this.id = id;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public static void main(String args[]) {
            List<Menu> list = new ArrayList<Menu>();
            for (int i = 1000; i > 0; i--) {
                list.add(new Menu(i));
            }
    
            for (Menu m : list) {
                System.out.println(m.getId());
            }
            Collections.sort(list,new MenuComparator());
    
            for (Menu m : list) {
                System.out.println(m.getId());
            }
        }
    }

    3.两个合体:

    package com.horizon.action;
    
    public class User implements Comparable<Object> {
        int id;
        String name;
    
        public User(int id, String name) {
            this.id = id;
            this.name = name;
        }
    
        /*
         * Getters and Setters
         */
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public int compareTo(Object o) {
            if (this == o) {
                return 0;
            } else if (o != null && o instanceof User) {
                User u = (User) o;
                if (id <= u.id) {
                    return -1;
                } else {
                    return 1;
                }
            } else {
                return -1;
            }
        }
    }
    package com.horizon.action;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class Test {
        // 编写Comparator,根据User的id对User进行排序
        private static final Comparator<User> COMPARATOR = new Comparator<User>() {
            public int compare(User o1, User o2) {
                return o1.compareTo(o2);// 运用User类的compareTo方法比较两个对象
            }
        };
    
        public static void main(String[] args) {
            List<User> student = new ArrayList<User>();
            User user1 = new User(1, "yueliming");
            User user2 = new User(2, "yueliming");
            student.add(user2);
            student.add(user1);
            Collections.sort(student, COMPARATOR);// 用我们写好的Comparator对student进行排序
            for (int i = 0; i < student.size(); i++) {
                System.out.println(student.get(i).getId());
            }
        }
    }
  • 相关阅读:
    冒泡排序
    Window中常见的dos命令
    spring boot 重定向
    阿里云轻量级服务器使用
    网络知识
    spring boot security 登出
    深入理解java虚拟机
    jsp内置对象与servlet的关系
    求一个有向无换图中,最长简单路径。动态规划问题15-1
    一些动态规划问题的java实现
  • 原文地址:https://www.cnblogs.com/tv151579/p/3634394.html
Copyright © 2011-2022 走看看