english | блог | контакт
Sun, 24 Jun 2012 @ 14:38

Итерация по массиву против списка

Теги: java performance

Сравнил производительность итерирования по массиву против ArrayList-а. 8-кратное превосходство в скорости в некоторых задачах решает.

import java.util.List;
import java.util.ArrayList;

public class ForeachTest {

  static long iterate(Integer[] ints) {
    long r = 0;
    for (Integer a : ints) {
      r = r + a % 10;;
    }
    return r;
  }

  static long iterate(List<Integer> ints) {
    long r = 0;
    for (Integer a : ints) {
      r = r + a % 10;
    }
    return r;
  }

  static long mi() { return System.currentTimeMillis(); }

  public static void main(String[] args) {
    final int COLLECTION_SIZE = 1000;
    final int TESTS = 10;
    final int ITERATIONS = 1000000;

    System.out.println("test array iteration");
    Integer[] intsArr = new Integer[COLLECTION_SIZE];
    for (int i = 0; i < COLLECTION_SIZE; i++) { intsArr[i] = i; }
    for (int it = 0; it < TESTS; it++) {
      long s = mi();
      for (int i = 0; i < ITERATIONS; i++) {
        iterate(intsArr);
      }
      System.out.println((mi() - s) + " ms");
    }

    System.out.println("test list iteration");
    List<Integer> intsList = new ArrayList<Integer>();
    for (int i = 0; i < COLLECTION_SIZE; i++) { intsList.add(i); }
    for (int it = 0; it < TESTS; it++) {
      long s = mi();
      for (int i = 0; i < ITERATIONS; i++) {
        iterate(intsList);
      }
      System.out.println((mi() - s) + " ms");
    }
  }
}