如果有的话,以下两个循环之间的性能差异是什么?
for (Object o: objectArrayList) {
o.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
和
for (int i=0; i<objectArrayList.size(); i++) {
objectArrayList.get(i).DoSomething();
}
Run Code Online (Sandbox Code Playgroud) 在Java中,迭代字符串中所有字符的最快方法是什么,这:
String str = "a really, really long string";
for (int i = 0, n = str.length(); i < n; i++) {
char c = str.charAt(i);
}
Run Code Online (Sandbox Code Playgroud)
或这个:
char[] chars = str.toCharArray();
for (int i = 0, n = chars.length; i < n; i++) {
char c = chars[i];
}
Run Code Online (Sandbox Code Playgroud)
编辑:
如果重复调用的成本是什么,我想知道的是charAt长迭代期间方法最终是要么不是比执行一个调用的成本小于或大于toCharArray开头,然后直接在迭代期间访问阵列.
如果有人能够为不同的字符串长度提供强大的基准测试,考虑到JIT预热时间,JVM启动时间等等,而不仅仅是两次调用之间的差异,那就太棒了System.currentTimeMillis().
给出以下代码段:
int[] arr = {1, 2, 3};
for (int i : arr)
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)
我有以下问题:
我有一个array的boolean条目:
boolean[] myBooleanArray = new boolean[24];
Run Code Online (Sandbox Code Playgroud)
目前我检查它是否包含如此真实:
Arrays.asList(myBooleanArray).contains(true);
Run Code Online (Sandbox Code Playgroud)
这是检查布尔数组的最快方法吗?如果没有,执行此检查的最快方法是什么?
编辑:
我通过在Android 4.03 Samsung S2设备上将其作为应用程序运行,将您的答案中的方法计时如下:
boolean[] myBooleanArray = new boolean[24];
long startTime = System.nanoTime();
suggestedMethod(myBooleanArray);
long endTime = System.nanoTime();
long duration = endTime - startTime;
Log.i("timetest", Long.toString(duration));
Run Code Online (Sandbox Code Playgroud)
时间排名超过五次,最快的是:
在5334和11584 ns之间:
for (boolean value : myBooleanArray) {
if (value) {
return true;
}
}
return false;
Run Code Online (Sandbox Code Playgroud)在160542和171417 ns之间:
Arrays.asList(myBooleanArray).contains(true);
Run Code Online (Sandbox Code Playgroud)在191833和205750之间ns:
Booleans.contains(myBooleanArray, true);
Run Code Online (Sandbox Code Playgroud)LibGDX是一个使用MVC模式的例子.
更新程序看起来像这样
List<Enemies> enemies = new List<Enemies>();
public void update() {
updateEnemies();
checkCollision();
}
void updateEnemies() {
for each enemy //Loop enemies list{
enemy.update();
}
}
void checkCollison(){
for each enemy//Loop enemies list{
if(enemy.overlaps(hero.bounds) {
//Do stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在它两次循环通过enemeies列表.我应该这样做吗?也许不是一个小清单,但我想添加很多列表,所以我应该合并它们吗?
干杯!
在为别人的代码编写一些单元测试时,我遇到了一个有趣的":"运算符.它看起来像这样:
for(Class classInstance : instanceOfOtherClass){
//Do some irrelevant stuff
}
Run Code Online (Sandbox Code Playgroud)
我从未见过没有"?"的":"运算符,就像编写三元语句时一样.我已经做了相当多的谷歌搜索,似乎无法找到任何明智的答案,我应该怎么读这个......
我是不是太复杂了?有没有人见过它?