如何在ArrayList中找到重复最多时间的String?

时间:2013-08-01 12:29:13

标签: java collections

我有一个ArrayList<String>,其中一列是数据时间秒等。

我想找到特定日期和时间的最大重复次数(没有秒数)。它可能是, 例如以下参数的10个值23.12.2012 21:00: 所以必须说明,比如左边只有15个符号进行比较。

关键是我没有值可以比较,因为我没有寻找特定的值,我正在寻找最大重复次数,当然还有值本身*给出了最大重复次数。 ArrayList按降序排序,最早的日期排在最后,最后一个排序。 ArrayList大小非常大,有1.7亿个原始数据。

那么,我该如何处理这项任务呢?

由于

1 个答案:

答案 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);
}