我有两个整数数组,每个大小为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;