我有一个ArrayList<String>
,其中一列是数据时间秒等。
我想找到特定日期和时间的最大重复次数(没有秒数)。它可能是, 例如以下参数的10个值23.12.2012 21:00: 所以必须说明,比如左边只有15个符号进行比较。
关键是我没有值可以比较,因为我没有寻找特定的值,我正在寻找最大重复次数,当然还有值本身*给出了最大重复次数。 ArrayList
按降序排序,最早的日期排在最后,最后一个排序。 ArrayList
大小非常大,有1.7亿个原始数据。
那么,我该如何处理这项任务呢?
由于
答案 0 :(得分:2)
这个想法非常简单。我们将利用ArrayList<String>
已排序的事实。我们将线性扫描列表。我们将跟踪当前项目的计数。当项目更改为其他项目时,我们会将当前计数与目前为止看到的最大计数进行比较。如果它更大,我们用我们跟踪的项目替换最大计数和最大项目,然后重新开始计数。我会打电话给你ArrayList<String>
list
。
ArrayList<String> list;
String currentMax;
int maxCount = 0;
String current;
int count = 0;
for(int i = 0; i < list.size(); i++) {
String item = parse(list.get(i));
if(item.equals(current)) {
count++;
}
else {
if(count > maxCount) {
maxCount = count;
currentMax = current;
}
count = 1;
current = item;
}
}
此外,您需要编写parse
例程,将String
列表中的ArrayList<String>
映射到您要考虑的具有日期和时间的部分,但不是秒。如果您的字符串格式为"dd.mm.yyyy hh:mm*"
,则实现非常简单:
static int length = "dd.mm.yyyy hh:mm".length();
static String parse(String item) {
return item.substring(0, length);
}