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