-1

我不知道如何正确表达这个词,但有人告诉我要编写一个返回最大课程对象(学生最多的课程)的方法。如果有两个课程的学生人数相同,它将返回两者。

ArrayList问题的第二部分是困扰我的问题,因为除了他指定的(已经使用过的)之外,我不允许制作另一个。有没有办法在不使用列表/散列的情况下跟踪两个以上的对象?

这是我到目前为止所做的,但它只返回一个课程对象。

public Course largestEnrollment(){
    int size = 0;
    Course p = null;
    for (Integer c : courseList.keySet()){
        if (courseList.get(c).getClassList().size() > size){
            p = courseList.get(c);
            size = courseList.get(c).getClassList().size();
        }
        return p;            
    }
    return null;        
}
4

4 回答 4

2

返回一个对象数组Course

public Course[] largestEnrollment(){

您需要决定如何在for循环中操作数组。

于 2013-03-14T19:41:20.347 回答
1

ArrayList根据大小排序。然后您可以返回最大课程的子列表

于 2013-03-14T19:44:05.947 回答
1

如果你没有这么多Course(例如<1k),你可以为你的对象实现Comparable或编写一个。这样您就可以从地图中获取集合中的所有值(课程),然后对集合进行排序,仅从排序集合的末尾获取具有相同值(大小)的那些元素。ComparatorCourse

我提到了集合的大小,因为排序将O(n)问题转化为O(nlogn). 但如果尺寸小,这是一种方便的方式。

无论如何,您必须将方法返回类型更改为集合或数组。

于 2013-03-14T19:46:53.207 回答
1

排序然后返回一个子列表:

public List<Course> largestEnrollment(List<Course> courses) {
    Collections.sort(courses, new Comparator<Course>() {
        @Override
        public int compare(Course o1, Course o2) {
            return o1.getClassList().size() - o2.getClassList().size();
        }
    });
    for (int indexOfLargest = 1; indexOfLargest < courses.size(); indexOfLargest ++) {
        if (courses.get(indexOfLargest - 1).getClassList().size() > courses.get(indexOfLargest).getClassList().size())
            return courses.subList(0, indexOfLargest);
    }
    return courses;
}
于 2013-03-14T20:52:40.840 回答