如何提高两个阵列之间的比较速度?

时间:2011-12-22 08:35:43

标签: java performance

我有两个整数数组,每个大小95700.i想要比较两个整数数组,我使用Integer.MAX_VALUE(2147483647)获得最大整数大小。

我使用了以下代码,

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

这段代码耗费了大量时间(50s)。如何缩短比较时间......请帮帮我

编辑:
这是我的logcat:

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

2 个答案:

答案 0 :(得分:2)

您需要提供更多细节,因为阵列比较无法按照描述进行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

这是十分之一毫秒。

答案 1 :(得分:1)

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

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

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

您可以尝试一种优化,但不要期望太多:

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