【问题标题】:Array Lists and Generics数组列表和泛型
【发布时间】:2015-07-31 20:26:24
【问题描述】:

我需要帮助解决以下问题:

定义一个名为 StudentDatabaseArrayList 的类,它使用泛型类型 T 必须实现 Sortable 的人使用它来创建学生数据库。该类应包括以下内容:

• 一个 ArrayList,用于保存某些实现 Sortable 的类的对象。

• 一个方法 insert(T newObject) 在适当的位置插入一个 newObject 在 ArrayList 中,使得 ArrayList 是一个排序列表,其中排序顺序为 由接口中的方法lessThan决定。例如,如果 T 是你的类 在作业 3 中定义,这将创建一个学生列表,这样所有学生 加拿大老年人首先出现。然后所有的加拿大普通学生 出现,紧随其后的是所有外国学生。在每个小组中,学生必须 按名称排序。

• 一个 toString() 方法,它返回系统中所有学生的描述, 使用上述排序顺序。

• 一个方法 retrieveStudentsInRange(T lowerLimit, T upperLimit),它返回 描述所有介于下限和上限之间的学生。

我已经创建了学生类(学生、普通学生、外国学生、高年级学生) 这是学生的样子:

public abstract class Student implements sortable {
private int studentNumber;
private String studentName;
private Course courses[];
private Student bestFriend;
private int numCourses;
private int takenNum;

private static int num = 1;

public Student(String studentName, int maxNum) {
    this.studentName = studentName;
    courses = new Course[maxNum];
    numCourses = maxNum;
    studentNumber = num;
    num++;
    takenNum = 0;
    bestFriend = null;
}

public Student(String studentName) {
    this(studentName, 4);
}

public String getName() {
    return studentName;
}

public abstract double computeFees();

public abstract String findCountry();

public int getTakenNum() {
    return takenNum;
}

public boolean insertCourse(Course aCourse) {
    for (int i = 0; i < takenNum; i++) {
        if (aCourse.courseCodeMatches(courses[i]))
            return false;
    }
    if (takenNum < numCourses || numCourses == 0) {
        courses[takenNum] = aCourse;
        takenNum++;
        return true;
    }
    return false;

}

public void setBestFriend(Student aStudent) {
    bestFriend = aStudent;
}

public boolean bothFriends() {
    if (this.studentName.equals(bestFriend.bestFriend.studentName))
        return true;
    return false;
}


public String toString() {
    String info = ("student # " + this.studentNumber + ", Name = " + this.studentName);
    if (this.bestFriend != null)
        info = info + ", best friend = " + this.bestFriend.studentName;
    int i = 0;
    while (i < this.takenNum) {
        info = info + "\n Course " + (i + 1) + ":   " + this.courses[i];
        i++;
    }
    info = info + " \n pays fees: $" + computeFees() + " and is from " +     findCountry() + "\n ";

    return info;
}

Sortable 看起来像这样:

interface sortable{
boolean lessThan(sortable anObject);
}

我在使用泛型为学生创建插入方法时遇到问题,任何提示/帮助将不胜感激。 这是我目前拥有的数组列表:

import java.util.ArrayList;
class StudentDatabaseArrayList<T> implements sortable  {
private ArrayList<T> myList;

public StudentDatabaseArrayList() {
    myList = new ArrayList<T>();
}
public void insert(T newObject) {
    if (myList.isEmpty()) {
        myList.add(0, newObject);
    }
    for (int i = 0; i < myList.size()-1; i++) {
        Student compare = (Student)myList.get(i);
        Student wantToAdd = (Student) newObject;
        while (compare.lessThan(wantToAdd)) {
            myList.add(i, newObject);
        }
    }
}

【问题讨论】:

  • 我遇到了麻烦:哪个麻烦?为什么要多次插入对象?您应该在比要插入的学生大的 first 学生之前插入一次。

标签: java generics arraylist


【解决方案1】:

在声明 StudentDatabaseArrayList 时,这一行:

class StudentDatabaseArrayList<T> implements sortable {

应该是:

class StudentDatabaseArrayList<T extends sortable> {

因为需要排序的是泛型类型 T,而不是数据库本身。

在您的 insert 方法中,这意味着您不再需要将 newObject 强制转换为 Student - 您将能够访问泛型类型 T 的任何对象的 lessThan 方法,因为“T extends sortable”。

【讨论】:

    【解决方案2】:

    你的界面应该和这个类似

    interface sortable<T>{
        boolean lessThan(T anObject);
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多