Java筆試題:將集合中的學生信息按照學生的年齡升序排列
最近很多學員在參加筆試時都被問到集合中排序的問題,在新年的***篇文章中給大家分享一下相關(guān)內(nèi)容。“將集合中的學生信息按照學生的年齡升序排列”這個題目主要考察的是求職者對集合中元素存取以及元素值比較的方法、排序方法(一般使用冒泡排序)、泛型集合、集合中自帶的sort方法、集合中比較器的應(yīng)用等。下面分別使用冒泡排序和Sort完成題目的要求。
無論使用哪種方法都需要先創(chuàng)建學生信息類,通常會要求在類中存放學號、年齡、姓名等屬性。學生信息類的代碼如下所示。
- 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)使用冒泡排序算法
由于題目要求是按照學生的年齡排序,因此,在遍歷集合元素時要根據(jù)年齡進行比較,并交換集合中相應(yīng)元素的值。實現(xiàn)的代碼如下所示。
- 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);
- }
- }
- }
執(zhí)行上面的代碼,效果如圖1所示。
圖1 排序后的結(jié)果
(2)使用比較器實現(xiàn)
在List集合中提供了sort方法能直接對集合中的元素實現(xiàn)冒泡排序,但由于在集合中存放的值是類的實例,而不是單純的值,因此,需要借助集合中的比較器來實現(xiàn)對學生信息類的年齡排序。使用比較器可以通過實現(xiàn)Comparator接口或者實現(xiàn)Comparable接口來完成,實現(xiàn)Comparator接口時,通常是自定義一個類來完成,并重寫compare方法;實現(xiàn)Comparable接口時,通常是直接用到要比較的類中,并重寫compareTo方法,比如,要比較學生信息類中的年齡屬性值,直接在學生信息類中實現(xiàn)Comparable接口即可。
在本例中采用的方式是實現(xiàn)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);
- }
- }
- }
執(zhí)行上面的代碼,效果與圖1一致。
至此,使用了2種方式完成將集合中學生信息按照年齡升序排序的操作。當然,完成對集合中元素排序的操作會有很多方法,這里只是給出2種參考方法,希望會對大家有所幫助和啟示。