相关疑难解决方法(0)

for循环和for循环之间是否存在性能差异?

如果有的话,以下两个循环之间的性能差异是什么?

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 performance for-loop

176
推荐指数
6
解决办法
10万
查看次数

迭代字符串中所有字符的最快方法

在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().

java string iteration performance char

153
推荐指数
4
解决办法
23万
查看次数

增强的for语句如何为数组工作,以及如何获取数组的迭代器?

给出以下代码段:

int[] arr = {1, 2, 3};
for (int i : arr)
    System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

我有以下问题:

  1. 以上for-each循环如何工作?
  2. 如何在Java中获取数组的迭代器?
  3. 数组是否转换为列表以获取迭代器?

java arrays foreach iterator

76
推荐指数
9
解决办法
17万
查看次数

检查布尔数组是否包含true的最快方法

我有一个arrayboolean条目:

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)

时间排名超过五次,最快的是:

  1. 在5334和11584 ns之间:

    for (boolean value : myBooleanArray) {
        if (value) {
            return true;
        }
    }
    return false;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在160542和171417 ns之间:

    Arrays.asList(myBooleanArray).contains(true);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在191833和205750之间ns:

    Booleans.contains(myBooleanArray, true);
    
    Run Code Online (Sandbox Code Playgroud)

java

8
推荐指数
2
解决办法
2万
查看次数

Java:循环列表两次消耗双倍功率?

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列表.我应该这样做吗?也许不是一个小清单,但我想添加很多列表,所以我应该合并它们吗?

干杯!

java list libgdx

2
推荐指数
1
解决办法
214
查看次数

For表达式中的Java":"运算符

在为别人的代码编写一些单元测试时,我遇到了一个有趣的":"运算符.它看起来像这样:

for(Class classInstance : instanceOfOtherClass){

//Do some irrelevant stuff

}
Run Code Online (Sandbox Code Playgroud)

我从未见过没有"?"的":"运算符,就像编写三元语句时一样.我已经做了相当多的谷歌搜索,似乎无法找到任何明智的答案,我应该怎么读这个......

我是不是太复杂了?有没有人见过它?

java junit for-loop ternary-operator ternary

1
推荐指数
1
解决办法
6385
查看次数