回来 别走 2022-06-10 10:56 采纳率: 71.4%
浏览 63
已结题

这个怎么按照年龄大小升序排列啊

这个排序的不会排了,是用抽象类与接口的知识嘛,怎么排列呀,谢谢啦

img

  • 写回答

3条回答 默认 最新

  • qq_25376897 2022-06-10 12:05
    关注

    第一种方法,User实现Comparable接口,重写compareTo方法,排序则可以使用Collections.sort

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class Test {
        public static void main(String[] args) {
            //定义一组User数据
            List<User> userList = new ArrayList<>();
            User user = new User("1","c",12);
            userList.add(user);
            user = new User("2","b",20);
            userList.add(user);
            user = new User("3","a",12);
            userList.add(user);
            
            //排序
            Collections.sort(userList);
            //输出
            System.out.println(userList);
        }
    }
    
    class User implements Comparable{
        public String id;
        public String name;
        public int age;
    
        public User(String id, String name, int age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }
    
        @Override
        public int compareTo(Object o) {
            User user = (User)o;
            if(this.age == user.age){
                //年龄相同,则按姓名排序
                return this.name.compareTo(user.name);
            }
            //年龄不相同,升序排列
            return this.age - user.age;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id='" + id + '\'' +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    

    第二种,User可以不实现Comparable接口,改成在Collections.sort里面实现Comparator接口的compare方法

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class Test {
        public static void main(String[] args) {
            //定义一组User数据
            List<User> userList = new ArrayList<>();
            User user = new User("1", "c", 12);
            userList.add(user);
            user = new User("2", "b", 20);
            userList.add(user);
            user = new User("3", "a", 12);
            userList.add(user);
    
            //排序
            Collections.sort(userList, new Comparator<User>() {
                @Override
                public int compare(User o1, User o2) {
                    if (o1.age == o2.age) {
                        //年龄相同,则按姓名排序
                        return o1.name.compareTo(o2.name);
                    }
                    //年龄不相同,升序排列
                    return o1.age - o2.age;
                }
            });
    
            //输出
            System.out.println(userList);
        }
    }
    
    class User {
        public String id;
        public String name;
        public int age;
    
        public User(String id, String name, int age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id='" + id + '\'' +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月18日
  • 已采纳回答 6月10日
  • 创建了问题 6月10日

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line