如何提高两个数组之间的比较速度



我有两个整数数组,每个大小为95700。我想比较两个整数数组,我使用integer . max_value(2147483647)得到了整数的最大大小。

我用了下面的代码,

for(int i=0;i<array1.length;i++) {
    if (array1[i] == 0xFF0000FF && array2[i] == 0xFFFFFFFF) {
        matched++;              
    } else {
        unMatched++;
    }
}

这段代码花费了很多时间(50秒)。如何减少比较时间…请帮帮我

编辑:
这是我的日志:

12-22 15:20:29.638: INFO/System.out(1660): start time-----18041173568804 
12-22 15:20:29.638: INFO/System.out(1660): time-----40981116222 
12-22 15:20:29.688: INFO/System.out(1660): The array comparison toook an average of 40.981116 second

您需要提供更多的细节,因为数组比较不可能花费50秒,甚至像描述的50毫秒

public static void main(String... args) {
    int[] array1 = new int[95700];
    int[] array2 = new int[95700];
    for (int j = 0; j < array1.length; j += 3) {
        array1[j] = 0xFF0000FF;
        array2[j] = 0xFFFFFFFF;
    }
    long start = System.nanoTime();
    int runs = 10000;
    int matched = 0, unMatched = 0;
    for (int r = 0; r < runs; r++) {
        matched = unMatched = 0;
        for (int i = 0; i < array1.length; i++) {
            if (array1[i] == 0xFF0000FF && array2[i] == 0xFFFFFFFF) {
                matched++;
            } else {
                unMatched++;
            }
        }
    }
    long time = System.nanoTime() - start;
    System.out.printf("The array comparison to an average of %.6f second, matched=%,d, unmatched=%,d%n",
            time / 1e9 / runs, matched, unMatched);
}

打印

The array comparison to an average of 0.000109 second, matched=31,900, unmatched=63,800

是十分之一毫秒。

在哪个平台/系统上运行?

变量是如何声明的?
Integer代替int会造成一些延迟,但仍然不足以获得50秒。

我在我非常旧的笔记本电脑上测试了这个代码片段(调试器,客户端模式),它花了不到1毫秒。

有一个优化你可以尝试,但不要期望太多:

for (int i=0; i<array1.length; i++) {
    if (array1[i] == 0xFF0000FF && array2[i] == 0xFFFFFFFF) {
        matched++;
    }
}
unMatched = array1.length - matched;

最新更新