我对这个概念非常执着,似乎无法绕开它。我有一个学校的作业,我需要用ArrayList<Student>
,String name
和String 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
}
};
}
对于您的compare
方法中的任何一个,如果两个对象在排序顺序上等效,则只需要返回0;如果o1
在排序顺序上位于o2
之前,则返回-1;或者,如果o1
按排序顺序在o2
之后。
您不可以使用Collections.sort(Comparator)
,因为如上所述,您的任务是执行选择排序。我不会详细介绍算法(我想这是您的练习),但是您可以在比较器中实现compare
方法,如下所示: