java - while-else-循环

标签 java performance arraylist while-loop theory

当然,这在 java 中是一个不可能的语句(迄今为止),但理想情况下我想实现它,因为它是许多迭代的核心。例如,在创建 ArrayList 时,我调用了 650,000 多次。 不幸的是,我的实际代码在 else 循环中没有 set;因此它将同时传递 addset 命令并浪费时间。

之后,我还在另一个循环中使用它,在该循环中它仅执行设置,因为数据已经创建,并且它与许多其他循环嵌套在一起,因此这是一个漫长的过程。

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 的速度

最佳答案

我错过了什么吗?

这不是假设的代码吗

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);
}

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


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

  • 就您所知,JIT 编译器的优化器可能已经移动了代码,因此“else”部分不再在循环中。

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

我的建议是暂时忘记这个问题。让程序工作。当它工作时,确定它是否运行得足够快。如果没有,则对其进行分析,并使用分析器输出来决定值得花时间优化的地方。

关于java - while-else-循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10791030/

相关文章:

java - 如何在 Java 中生成 AES 128 位 key 。我想要这样的东西。 Es8NxqG/f3VMzcd9mrPSQQ==

java - 用 `watch` 解析命令 `InputStream`

java - 获取多行文本字段中的光标位置

java - 使用JDK 1.7编译Android项目

mysql - 在具有 1000 万行的数据库上选择 mysql 时出现错误 504

java - 从 HashMap 返回 List 还是将 List 保留在内存中更好?

java - 如何使用 BeanUtils.populate 方法从 String[] 转换为 ArrayList<String>?

java - 从 Java 中的 ArrayList 中获取唯一的元素对

java - 整数的通用 ArrayList 代替存储字符串?

sql-server - 多个 INNER JOIN 太慢 SQL SERVER