对arraylist java中的重复值进行分组和计数

对arraylist java中的重复值进行分组和计数,java,arraylist,Java,Arraylist,我已经在我的应用程序中使用了ArrayList,所以我不想转到HashMaps,因为我已经看到了一些使用ArrayList的答案,但在我的示例中不起作用 我正在创建我高中的最后一个项目,这是一个学习时间表计划。我已经设法按考试日期对ArrayList进行了排序,但现在我正在尝试分析时间表以对其进行评分,并将评分与其他生成的时间表进行比较,从而为用户提供最佳时间表(具有最高值) 我已经得到了时间表,可以输出他们每天要做的事情,比如:南非荷兰语、IT、LO、数学、南非荷兰语、南非荷兰语等等 但它似乎

我已经在我的应用程序中使用了ArrayList,所以我不想转到HashMaps,因为我已经看到了一些使用ArrayList的答案,但在我的示例中不起作用

我正在创建我高中的最后一个项目,这是一个学习时间表计划。我已经设法按考试日期对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));
    }
}
ArrayList天数=新建ArrayList();
对于(int i=0;i
但这并不是对数据进行分组并计算重复数据。 请帮忙,我的项目一周后到期,我已经花了两个月的时间。我快做完了,被困在这里了


提前谢谢

您可以使用
java.util.Collections.frequency

int count = Collections.frequency(timeTable, value);
编辑:对评论中最后一个问题的回答:

当然,有一种简单快捷的方法可以说这个值发生了3次 在arraylist中


有必要提及的是,在您的
时间表中
,假设它包含两个相同的
-
南非荷兰语-1
,当您看到它们是相同的时,
包含
函数并不这么认为。虽然它们对每个属性都有相同的值,但哈希代码却不同

您需要重写
equals()
的函数,以确保在比较两个
时,如果它们具有相同的值,则将它们视为一个对象


对不起,我的英语很差,希望你能理解。

这给出了相同的结果,总是返回-1,即使在打印
天之后
我可以看到它没有对数据进行分组。有7个类操作数据以达到这一点。数据最初来自一个数据库。当然有一种简单快捷的方法可以说,
这个值在arraylist中出现了3次
?您是否尝试过计数排序?它将为您提供沿途重复的数量,您将以分组的值结束。