xch*_*onx 10 java theory performance arraylist while-loop
当然这在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);
}
Run Code Online (Sandbox Code Playgroud)
任何想法或理论?在if语句和ArrayList命令等方面,我不确定java的速度
Ste*_*n C 20
我错过了什么吗?
这个假设的代码不是
while(rowIndex >= dataColLinker.size()) {
dataColLinker.add(value);
} else {
dataColLinker.set(rowIndex, value);
}
Run Code Online (Sandbox Code Playgroud)
意思是同样的事情?
while(rowIndex >= dataColLinker.size()) {
dataColLinker.add(value);
}
dataColLinker.set(rowIndex, value);
Run Code Online (Sandbox Code Playgroud)
或这个?
if (rowIndex >= dataColLinker.size()) {
do {
dataColLinker.add(value);
} while(rowIndex >= dataColLinker.size());
} else {
dataColLinker.set(rowIndex, value);
}
Run Code Online (Sandbox Code Playgroud)
(后者更有意义......我猜).无论哪种方式,很明显你可以重写循环,以便在循环中不重复"else test"......就像我刚刚做的那样.
FWIW,这很可能是过早优化的情况.也就是说,您可能在浪费时间优化不需要优化的代码:
众所周知,JIT编译器的优化器可能已经移动了代码,因此"else"部分不再处于循环中.
即使它没有,也有可能你试图优化的特定事物不是一个重要的瓶颈......即使它可能被执行600,000次.
我的建议是暂时忘记这个问题.让程序正常运行.当它工作时,确定它是否运行得足够快.如果没有,则对其进行分析,并使用分析器输出来确定值得花时间优化的位置.
| 归档时间: |
|
| 查看次数: |
88454 次 |
| 最近记录: |