Java希望改进代码片段

时间:2014-09-22 23:27:09

标签: java arrays string performance char

我希望改进此代码:

for (int i = 0; i < a.length(); i++) {
    for (int j = 0; j < b.length(); j++) {
        if (arrayA[i] == arrayB[j]) {
            arrayA[i] = ' ';
            arrayB[j] = ' ';
        }
    }
}

昂贵的操作是

arrayA[i] = ' ';
arrayB[j] = ' ';

如果我发表评论,那么代码的运行时间为180ms到12ms ......

需要类似的东西,所以我可以计算空数组。

1 个答案:

答案 0 :(得分:2)

只要满足if条件,就可以通过突破内循环来改善这一点。您还可以使用外部循环中的临时变量来提高性能,以避免在内部循环中不断地进行arrayA的下标:

for (int i = 0; i < a.length(); i++) {
    char ch = arrayA[i];
    for (int j = 0; j < b.length(); j++) {
        if (ch == arrayB[j]) {
            ch = ' ' = arrayB[j] = ' ';
            break;
        }
    }
    arrayA[i] = ch;
}

突破内循环是安全的原因是,一旦ch(或原始代码中的arrayA[i])设置为' ',那么在后续传递中内部循环,if测试只有在arrayB[j]已经' '时才会成功,因此分配将使值保持不变(并且只是消耗cpu周期)。