小编典典

while-else循环

java

当然,这在Java(到目前为止)中是不可能的语句,但是理想情况下,我希望实现它,因为它是许多迭代的核心。例如,第一次创建它时,它被称为650,000+次ArrayList。不幸的是,现实是我的实际代码没有set内部else循环。因此,它将同时通过add和,set同时浪费命令和时间。

之后,我还将它放在另一个循环中,在该循环中,由于已创建数据,它仅执行集合,并且在许多其他情况中都被嵌套,因此这是一个漫长的过程。

ArrayList<Integer>  dataColLinker = new java.util.ArrayList<Integer>();
...
...
public void setLinkerAt( int value, int rowIndex) {
    ...
    while(rowIndex >= dataColLinker.size()) {
        dataColLinker.add(value);
    } else {
        dataColLinker.set(rowIndex, value);
    }

有什么想法或理论吗?我不确定if语句和ArrayList命令等方面的Java速度


阅读 214

收藏
2020-11-01

共1个答案

小编典典

我想念什么吗?

这不是假想的代码

while(rowIndex >= dataColLinker.size()) {
    dataColLinker.add(value);
} else {
    dataColLinker.set(rowIndex, value);
}

就是这个意思吗?

while(rowIndex >= dataColLinker.size()) {
    dataColLinker.add(value);
}
dataColLinker.set(rowIndex, value);

或这个?

if (rowIndex >= dataColLinker.size()) {
    do {
        dataColLinker.add(value);
    } while(rowIndex >= dataColLinker.size());
} else {
    dataColLinker.set(rowIndex, value);
}

(后者更有意义…我猜)。无论哪种方式,很明显,您都可以重写循环,以使“其他测试”不会在循环内重复……就像我刚才所做的那样。


FWIW,这很可能是过早优化的情况。也就是说,您可能在浪费时间来优化不需要进行优化的代码:

  • 众所周知,JIT编译器的优化器可能已经移动了代码,因此“其他”部分不再处于循环中。

  • 即使没有,您尝试优化的特定事物也不是一个重大的瓶颈……即使它可能执行了60万次。

我的建议是暂时忘记此问题。使程序正常运行。工作时,请确定其运行速度是否足够快。如果没有,则对其进行概要分析,并使用概要分析器输出来确定值得花时间优化的位置。

2020-11-01