最近很多学员在参加笔试时都被问到集合中排序的问题,在新年的第一篇文章中给大家分享一下相关内容。“将集合中的学生信息按照学生的年龄升序排列”这个题目主要考察的是求职者对集合中元素存取以及元素值比较的方法、排序方法(一般使用冒泡排序)、泛型集合、集合中自带的sort方法、集合中比较器的应用等。下面分别使用冒泡排序和Sort完成题目的要求。
无论使用哪种方法都需要先创建学生信息类,通常会要求在类中存放学号、年龄、姓名等属性。学生信息类的代码如下所示。
class Student {
private intid;
private String name;
private intage;
publicStudent(intid, Stringname,intage) {
this.id = id;
this.name=name;
this.age = age;
}
publicintgetId() {
returnid;
}
publicvoid setId(intid) {
this.id = id;
}
publicString getName() {
returnname;
}
publicvoid setName(Stringname) {
this.name=name;
}
publicintgetAge() {
returnage;
}
publicvoid setAge(intage) {
this.age = age;
}
@Override
publicString toString() {
return"Student [id="+ id +", name="+name+", age="+ age +"]";
}
}
(1)使用冒泡排序算法
由于题目要求是按照学生的年龄排序,因此,在遍历集合元素时要根据年龄进行比较,并交换集合中相应元素的值。实现的代码如下所示。
publicclass TestStudent {
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
List list = new ArrayList();
list.add(new Student(1,"小张",20));
list.add(new Student(2,"小王",18));
list.add(new Student(3,"小李",19));
//使用冒泡排序算法
for(inti=0;i
for(intj=0;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的类,代码如下所示。
publicclass TestStudent {
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
List list = new ArrayList();
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种参考方法,希望会对大家有所帮助和启示。
【编辑推荐】
【责任编辑:武晓燕 TEL:(010)68476606】
点赞 0