zoukankan      html  css  js  c++  java
  • Java实现自定义排序

    前言:排序是编程中经常需要用到的功能,通常我们可以通过对我们的查询SQL进行排序。在 Java 的工具类 Collections 中也提供了 sort() 方法用于实现对列表等集合中元素的排序。
    Collections.sort() 方法有两种形式:Collections.sort(List) 和 Collections.sort(List, Comparator)。



    1. 实现 Comparable 接口

    public interface Comparable<T> {
     
        public int compareTo(T o);
     
    }
    
    
    Comparable 是排序接口,一个类实现了Comparable接口,就意味着该类支持排序。
    
    接口中通过x.compareTo(y) 来比较x和y的大小。若返回负数,意味着x比y小;返回零,意味着x等于y;返回正数,意味着x大于y。
    

    直接上代码

    public class User implements Comparable<User> {
        private String name;
        private int age;
     
        public User() {
        }
     
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
     
        public String getName() {
            return name;
        }
     
        public int getAge() {
            return age;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public void setAge(int age) {
            this.age = age;
        }
     
     
        @Override
        public int compareTo(User user) {
           return age - user.getAge();
        }
    }
    

    public class JavaBase {
        public static void main(String[] args) {
            User user1 = new User("Jackie", 25);
            User user2 = new User("Jim", 18);
            User user3 = new User("Lucy", 30);
            User user4 = new User("Kate", 18);
     
     
            List<User> users = new ArrayList<>();
            users.add(user1);
            users.add(user2);
            users.add(user3);
            users.add(user4);
     
            System.out.println("排序前" );
            for (User user : users) {
                System.out.println(user.getName() + " " + user);
            }
     
            // ================对集合进行排序==================
            Collections.sort(users);
    
            System.out.println("排序后" );
            for (User user : users) {
                System.out.println(user.getName() + " " + user);
            }
        }
    }
    


    2. 实现 Comparator 接口

    public interface Comparator<T> {
     
        int compare(T o1, T o2);
     
        boolean equals(Object obj);
     
    }
    
    接口中通过x.compare(y) 来比较x和y的大小。若返回负数,意味着x比y小;返回零,意味着x等于y;返回正数,意味着x大于y。
    

    直接上代码

    public class User {
        private String name;
        private int age;
     
        public User() {
        }
     
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
     
        public String getName() {
            return name;
        }
     
        public int getAge() {
            return age;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public void setAge(int age) {
            this.age = age;
        }
     
     
        @Override
        public int compareTo(User user) {
           return age - user.getAge();
        }
    }
    

    public class UserComparator implements Comparator {
        @Override
        public int compare(Object o1, Object o2) {
            User user1 = (User) o1;
            User user2 = (User) o2;
     
            if (user1.getAge() > user2.getAge()) {
                return 1;
            } else if (user1.getAge() < user2.getAge()) {
                return -1;
            } else {
                //利用String自身的排序方法。
                //如果年龄相同就按名字进行排序
                return user1.getName().compareTo(user2.getName());
            }
        }
    }
    

    public class JavaBase {
        public static void main(String[] args) {
            User user1 = new User("Jackie", 25);
            User user2 = new User("Jim", 18);
            User user3 = new User("Lucy", 30);
            User user4 = new User("Kate", 18);
     
     
            List<User> users = new ArrayList<>();
            users.add(user1);
            users.add(user2);
            users.add(user3);
            users.add(user4);
     
            System.out.println("排序前" );
            for (User user : users) {
                System.out.println(user.getName() + " " + user);
            }
     
            // ================对集合进行排序==================
            Collections.sort(users,new UserComparator());
    
            System.out.println("排序后" );
            for (User user : users) {
                System.out.println(user.getName() + " " + user);
            }
        }
    }
    


    3. 二者区别

    Comparable和Comparator都是用来实现集合中元素的比较、排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以想要实现排序,就需要在集合外定义Comparator接口或在集合内实现Comparable接口两种方法。
    可以说一个是自已完成比较,一个是外部程序(自定义比较规则)实现比较的差别而已。
    方式一相对来说耦合度比较高,不优雅。

  • 相关阅读:
    201871010135
    201871010135-张玉晶 实验三 结对项目——《D{0-1}KP 实例数据集算法实验平台》项目报告
    201871010135-张玉晶 实验二 个人项目——《背包问题{0-1}》项目报告
    201871010135-张玉晶 实验一 软件工程准备 ——软件工程及markdown编辑器的初步认识
    张玉晶 201871010135《面向对象程序设计(java)》课程学习总结
    201871010135 张玉晶 《面向对象程序设计(java)》第十七周学习总结
    201871010135 张玉晶《面向对象程序设计(java)》第十六周学习总结
    201871010135 张玉晶《面向对象程序设计(java)》第十五周学习总结
    201871010135 张玉晶《面向对象程序设计(java)》第十四周学习总结
    201871010135 张玉晶《面向对象程序设计(java)》第十三周学习总结
  • 原文地址:https://www.cnblogs.com/itlihao/p/14947978.html
Copyright © 2011-2022 走看看