java集合排序问题 求排序部分代码

import java.util.*;

public class Student {

    public String name;
    public int score;    
     public static  void main (String[] args) {
        System.out.println("*****录入学员信息,当录入学员的姓名分数为0时结束*****");
        Scanner input = new Scanner(System.in);
        ArrayList<Student> arraylist = new ArrayList<Student>();
        //输入学员信息



       while(true){ 
             Student student = new Student();
             System.out.println("请输入学员姓名:");
                   student.name = input.next();
                                        arraylist.add(student);
             }
             System.out.println("请输入学员分数:");
             student.score = input.nextInt();

          if(student.score==0){
                   System.out.println("结束录入!");
                   break;
                   }
                   }


        //按照成绩排序













         //输出学员信息
         System.out.println("学员的信息如下:");
         System.out.println("姓名\t分数\t");
         Iterator<Student> iterator = arraylist.iterator();
         while(iterator.hasNext()){
                Student a = iterator.next();
                System.out.println(a.name+"\t"+a.score+"\t");
      }
      }

}

6个回答

最后一楼已经接近真正解决方案了,不过我却不建议呢样解决,其实我们集合排序有两个接口,一个是Comparable,一个是Comparator
第一个就是5楼的解决办法,下面我说第二种:
第二种实体类什么都不需要动,只需要在你需要排序的呢个空白部分加上一部分代码,说ArrayList排序麻烦的童鞋注意了,没有比这个更简单的排序了,你说麻烦只是你还不知道原来Java里面有这个东西,
在集合中有一个工具类Collections,这是集合工具类,里面本身就封装了集合排序,我们只需要调用双参的方法
Collections.sort(list,
new Comparator() {
@Override
public int compare(User o1,
User o2) {
return o1.getScore() - o2.getScore();// 升序
//return o2.getScore()-o1.getScore();// 降序
}
});

为什么你非得用一个ArrayList来存Student呢?(不是不能解决,就是麻烦)

qq_37469456
qq_37469456 那用什么比较简单呀?
2 年多之前 回复

试试下面代码

private static void sortStudents(ArrayList<Student> arraylist) {
        // 输出学员信息
        System.out.println("学员的信息如下:");
        System.out.println("姓名\t分数\t");

        arraylist.stream().sorted((stu1, stu2) -> stu1.score - stu2.score)
                .forEach(stu -> System.out
                        .println(stu.name + "\t" + stu.score + "\t"));;
    }

Student implements Comparable
{

        //在实体类中添加
          public int compareTo(Object obj) {// Comparable接口中的方法  
    Student b = (Student) obj;  
    return this.score - b.score; // 按score比较大小,用于默认排序  
}  

}

d007letian
007Detective 此楼正解
2 年多之前 回复

这个才是正解,Java就是不断扩充眼界的过程,眼界有时候达不到,可能一辈子都不知道某个问题还有某种解决办法,所以一定要不断扩充自己

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!