将集合中的学生信息按照学生的年龄升序排列
来源:互联网 发布:苹果数据接口转usb 编辑:程序博客网 时间:2024/06/01 07:34
最近很多学员在参加笔试时都被问到集合中排序的问题,在新年的第一篇文章中给大家分享一下相关内容。“将集合中的学生信息按照学生的年龄升序排列”这个题目主要考察的是求职者对集合中元素存取以及元素值比较的方法、排序方法(一般使用冒泡排序)、泛型集合、集合中自带的sort方法、集合中比较器的应用等。下面分别使用冒泡排序和Sort完成题目的要求。
无论使用哪种方法都需要先创建学生信息类,通常会要求在类中存放学号、年龄、姓名等属性。学生信息类的代码如下所示。
- class Student {
- private int id;
- private String name;
- private int age;
- public Student(int id, String name, int age) {
- this.id = id;
- this.name = name;
- this.age = age;
- }
- 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;
- }
- public int getAge {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- @Override
- public String toString {
- return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
- }
- }
(1)使用冒泡排序算法
由于题目要求是按照学生的年龄排序,因此,在遍历集合元素时要根据年龄进行比较,并交换集合中相应元素的值。实现的代码如下所示。
- public class TestStudent {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- List<Student> list = new ArrayList<Student>;
- list.add(new Student(1,"小张",20));
- list.add(new Student(2,"小王",18));
- list.add(new Student(3,"小李",19));
- //使用冒泡排序算法
- for(int i=0;i<list.size-1;i++){
- for(int j=0;j<list.size-1-i;j++){
- if(list.get(j).getAge>list.get(j+1).getAge){
- Student student=list.get(j);
- list.set(j, list.get(j+1));
- list.set(j+1, student);
- }
- }
- }
- for(Student stu:list){
- System.out.println(stu);
- }
- }
- }
执行上面的代码,效果如图1所示。
图1 排序后的结果
(2)使用比较器实现
在List集合中提供了sort方法能直接对集合中的元素实现冒泡排序,但由于在集合中存放的值是类的实例,而不是单纯的值,因此,需要借助集合中的比较器来实现对学生信息类的年龄排序。使用比较器可以通过实现Comparator接口或者实现Comparable接口来完成,实现Comparator接口时,通常是自定义一个类来完成,并重写compare方法;实现Comparable接口时,通常是直接用到要比较的类中,并重写compareTo方法,比如,要比较学生信息类中的年龄属性值,直接在学生信息类中实现Comparable接口即可。
在本例中采用的方式是实现Comparator接口的方式,自定义一个名为MyCompare的类,代码如下所示。
- public class TestStudent {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- List<Student> list = new ArrayList<Student>;
- list.add(new Student(1,"小张",20));
- list.add(new Student(2,"小王",18));
- list.add(new Student(3,"小李",19));
- Collections.sort(list,new MyCompare); //使用比较器
- for(Student stu:list){
- System.out.println(stu);
- }
- }
- }
执行上面的代码,效果与图1一致。
至此,使用了2种方式完成将集合中学生信息按照年龄升序排序的操作。当然,完成对集合中元素排序的操作会有很多方法,这里只是给出2种参考方法,希望会对大家有所帮助和启示。
【编辑推荐】
本文为头条号作者发布,不代表今日头条立场。
- Java笔试题:将集合中的学生信息按照学生的年龄升序排列
- 将集合中的学生信息按照学生的年龄升序排列
- 将集合中的学生的年龄升序排列
- Java 往TreeSet集合中存储自定义对象学生,按照学生的年龄进行排序。
- SQL - 找出年龄在18到20之间的学生的学号、姓名、年龄,并按年龄升序排列
- 将用户按年龄分组,显示组人数大于2的,并按照人数降序排列,人数一样多的时候按照年龄升序排列。`
- 对一个存储学生信息的单向链表,按照学号升序对链表进行排序,每个节点包含了一个学生ID
- 输入学生个数,学生姓名和他们的成绩,然后按照学生成绩降序排列
- 1061 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
- 按学生成绩进行升序排列
- Java 使用TreeMap对学生对象的年龄进行升序排序。
- 学生信息是:姓名,学号,性别,年龄,用一个链表,把这些信息连在一起,给出一个age, 在些链表中删除学生年龄等于age的学生信息。
- 键盘录入多名学生的信息: 格式:姓名,数学成绩,语文成绩,英文成绩,按总分由高到低 将学生的信息进行排列到文件中
- 一个学生的信息是:姓名,学号,性别,年龄等信息,用一个链表,把这些学生信息连在一起, 给出一个age, 在些链表中删除学生年龄等于age的学生信息。
- 一个学生的信息是:姓名,学号,性别,年龄等信息,用一个链表,把这些学生信息连在一起, 给出一个age, 在些链表中删除学生年龄等于age的学生信息。
- 一个学生的信息是:姓名,学号,性别,年龄等信息,用一个链表,把这些学生信息连在一起, 给出一个age, 在些链表中删除学生年龄等于age的学生信息
- 一个学生的信息是:姓名,学号,性别,年龄等信息,用一个链表,把这些学生信息连在一起, 给出一个age, 在 链表中删除学生年龄等于age的学生信息。
- 集合方式添加学生信息
- Trailing Zeroes (III)
- STL——序列式容器的总结
- 2017多校训练第二场 hdu6045 Is Derek lying
- SpringData查询过程解析
- BZOJ 2565: 最长双回文串 manacher
- 将集合中的学生信息按照学生的年龄升序排列
- web开发工具
- Abp项目InternalServerError,SimpleStringCipher.Decrypt()找不到
- 正则表达式
- C++多态
- IE浏览器下AJAX缓存问题导致数据不更新的解决办法
- android webview无法上传文件的解决方案
- 详解LAMP源码编译安装
- Python定时任务的实现方式