我在我的应用程序中使用了ArrayLists,所以我不想转移到HashMaps,因为我已经看到了一些使用它的答案,但在我的情况下不起作用。
我正在创建我的最后一个高中项目,这是一个学习时间表调度程序。我已经设法按照考试日期对ArrayList进行排序,但现在我正在尝试分析时间表以对其进行评级,并将评级与其他生成的时间表进行比较,以便为用户提供最佳时间表(具有最高值)。
我已经制定了时间表来输出他们每天将要做的事情,即:南非荷兰语,IT,LO,数学,南非荷兰语,南非荷兰语等。
但是,即使最后两次考试在2天之内或者非常接近,它似乎也会在最后一次考试中重复,最后一次考试将在整个名单中占据主导地位。像这样:
Exam Dates:
LO = 2 Sep
Maths = 5 Sep
IT = 9 Sep
Afrikaans = 10 Sep
Results:
LO
IT
Afrikaans
Maths
IT
Afrikaans
Afrikaans
Afrikaans
Afrikaans
正如您所看到的,结果对最后一个主题的权重要大得多。
现在我正在尝试比较和分组数据,以便我可以看到为每个主题分配了多少天,因此使用上面的示例我需要它看起来像这样:
LO = 1
Maths = 1
IT = 2
Afrikaans = 5
到目前为止,我有这个:
ArrayList<Day> days = new ArrayList<Day>();
For(int i = 0; i < timeTable.size(); i++) {
// need to group the days here
if(days.contains(timeTable.get(i))) {
days.get(i).incrementNumberOfDays();
} else {
days.add(timeTable.get(i));
}
}
但这不是对数据进行分组并计算重复数据。 请帮助,我的项目将在一周内完成,我花了两个月的时间。我快结束了,我被困在这里。
提前致谢!
答案 0 :(得分:1)
您可以使用java.util.Collections.frequency
:
int count = Collections.frequency(timeTable, value);
编辑:回答你在评论中提到的最后一个问题:
当然有一种快速简单的方法可以说这个值发生了3次 在arraylist?
答案 1 :(得分:0)
有必要在timeTable
中提及,假设它包含两个相同的 Day
- Afrikaans - 1
,当您看到它们是同样,contains
函数并不这么认为。虽然它们对每个属性都有相同的值,但不是哈希码。
您需要覆盖equals()
的功能,以确保在比较两个Day
时,如果它们具有相同的值,则将它们视为一个对象。
抱歉我的英语不好,希望你能得到它。