您遇到的问题是,使用迭代器比使用直接查找要慢。在我的机器上,每次迭代的差异约为0.13 ns。相反,使用数组可以为每次迭代节省0.15
ns。在99%的情况下,这应该是微不足道的。
public static void main(String... args) { int testLength = 100 * 1000 * 1000; String[] stringArray = new String[testLength]; Arrays.fill(stringArray, "a"); List<String> stringList = new ArrayList<String>(Arrays.asList(stringArray)); { long start = System.nanoTime(); long total = 0; for (String str : stringArray) { total += str.length(); } System.out.printf("The for each Array loop time was %.2f ns total=%d%n", (double) (System.nanoTime() - start) / testLength, total); } { long start = System.nanoTime(); long total = 0; for (int i = 0, stringListSize = stringList.size(); i < stringListSize; i++) { String str = stringList.get(i); total += str.length(); } System.out.printf("The for/get List loop time was %.2f ns total=%d%n", (double) (System.nanoTime() - start) / testLength, total); } { long start = System.nanoTime(); long total = 0; for (String str : stringList) { total += str.length(); } System.out.printf("The for each List loop time was %.2f ns total=%d%n", (double) (System.nanoTime() - start) / testLength, total); }}当运行十亿个条目时,将打印条目(使用Java 6 update26。)
The for each Array loop time was 0.76 ns total=1000000000The for/get List loop time was 0.91 ns total=1000000000The for each List loop time was 1.04 ns total=1000000000
当运行十亿个条目时,将打印条目(使用OpenJDK7。)
The for each Array loop time was 0.76 ns total=1000000000The for/get List loop time was 0.91 ns total=1000000000The for each List loop time was 1.04 ns total=1000000000
即完全一样。;)



