使用比较器对带有选择排序的Student类型的ArrayList进行排序(在这种情况下,不能使用Collections.sort方法)

问题描述 投票:0回答:2

我对这个概念非常执着,似乎无法绕开它。我有一个学校的作业,我需要用ArrayList<Student>String nameString address的值制作一个int rollno

创建ArrayList并填充它根本不是问题。对我来说,问题是必须使用两个Comparator类和一个选择排序来按名称和rollno对ArrayList进行排序。在这种情况下,我无法使用Collections.sort方法。

我非常困在这里,非常感谢您的帮助。

谢谢!

Sort.java

import java.util.*;

public class Sort {

    public Comparator<Student>sortByRoll;
    public Comparator<Student>sortByName;

    public static void main(String [] args) {

        // Declare ArrayList Student

        ArrayList<Student>studentList = new ArrayList<Student>();

        // Create Objects using Student Class

        Student s1 = new Student("John Smith", 1001, "101 Meadow Ave");
        Student s2 = new Student("William James", 2011, "1201 Joney Ave");
        Student s3 = new Student("Rocky Ferguson", 3003, "1011 Bleeker Street");
        Student s4 = new Student("Kitty Roberts", 9284, "906 Dog Ave");
        Student s5 = new Student("Lionel Doe", 2100, "221 Colorado Ave");
        Student s6 = new Student("Linus Jim", 5993, "26 Cass Ave");
        Student s7 = new Student("Haley Henry", 9019, "20001 Log Blvd");
        Student s8 = new Student("Penny Cone", 1009, "11 Cracked Court");
        Student s9 = new Student("John Shepherd", 1029, "2010 Gold Street");
        Student s10 = new Student("Joshua Old", 8463, "77 Railroad Street");

        // Adding Objects to ArrayList studentList

        studentList.add(s1);
        studentList.add(s2);
        studentList.add(s3);
        studentList.add(s4);
        studentList.add(s5);
        studentList.add(s6);
        studentList.add(s7);
        studentList.add(s8);
        studentList.add(s9);
        studentList.add(s10);

    }


}

Student.java

public class Student extends Sort {

    // Variables for this class

    public int rollno;
    public String name;
    public String address;
    public String student;

    // Constructor for creating a student

    Student(String name, int rollno, String address) {

        this.name = name;
        this.rollno = rollno;
        this.address = address;

    }

    //Getters for name, address, and number

    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }

    public int getRollNo() {
        return rollno;
    }
}

SortByName.java

import java.util.Comparator;

public class sortByName extends Sort implements Comparator<Student>{

        @Override
        public int compare(Student o1, Student o2) {

            // Help Plz

    };

sortByNum.java

import java.util.Comparator;

public class sortByNum extends Sort implements Comparator<Student> {


        @Override
        public int compare(Student o1, Student o2) {

            //Help plz
        }

    };
}
java arraylist comparator selection-sort
2个回答
0
投票

对于您的compare方法中的任何一个,如果两个对象在排序顺序上等效,则只需要返回0;如果o1在排序顺序上位于o2之前,则返回-1;或者,如果o1按排序顺序在o2之后。


0
投票

您不可以使用Collections.sort(Comparator),因为如上所述,您的任务是执行选择排序。我不会详细介绍算法(我想这是您的练习),但是您可以在比较器中实现compare方法,如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.