从没有ArrayList的函数返回两个对象

时间:2013-03-14 19:39:21

标签: java loops for-loop

我不确定如何正确地说出这一点,但我被告知写一个方法可以返回最大的课程对象(该课程的学生人数最多)。如果有两门课程的学生数量相同,那么两者都会返回。

问题的第二部分是困扰我的,因为我不允许制作另一个ArrayList而不是他指定的(已经使用过)。有没有办法在不使用list / hash的情况下跟踪两个+对象?

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

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 个答案:

答案 0 :(得分:2)

返回Course个对象数组:

public Course[] largestEnrollment(){

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

答案 1 :(得分:1)

根据尺寸对ArrayList进行排序。然后你可以返回sub-list个最大的课程。

答案 2 :(得分:1)

如果您没有那么多Course(例如< 1k),则可以为Comparable对象实施Comparator或写Course。因此,您可以从地图中获取集合中的所有值(课程),然后对集合进行排序,只需从已排序集合的末尾对具有相同值(大小)的元素进行排序。

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

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

答案 3 :(得分: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;
}