全面测试JAVA各种循环的性能
来源:优易学  2011-1-20 12:36:18   【优易学:中国教育考试门户网】   资料下载   IT书店
  以前一直有人说,foreach的性能有损失,不建议使用,今天特意测试了一下,结果是 for方式的性能最好,foreach次之,而Iterator循环性能最差..
  1 完整的测试代码
  view plaincopy to clipboardprint?
  import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.List;
  /**
  * 测试JAVA各种循环的性能。
  * for 方式的性能最好,foreach次之,而Iterator循环性能最差。
  *
  * @author 青年人网
  */
  public class TestLoop {
  public static void main(String[] args) {
  int number = 1000000;
  // 我们构造一个列表
  List<String> list = new ArrayList<String>(number);
  for (int i = 0; i < number; i++) {
  list.add(Integer.toString(i));
  }
  System.out.println("测试列表的性能...");
  // 我们用foreach方式测试
  long begin = System.nanoTime();
  for (String i : list) {
  testMethod(i);
  }
  System.out.printf("%10s=%10d\n", "foreach", System.nanoTime() - begin);
  begin = System.nanoTime();
  // 下面我们用Iterator测试
  Iterator<String> it = list.iterator();
  while (it.hasNext()) {
  testMethod(it.next());
  }
  System.out.printf("%10s=%10d\n", "iterator", (System.nanoTime() - begin));
  // 第三种,我们用index进行
  begin = System.nanoTime();
  for (int i = 0; i < number; i++) {
  testMethod(list.get(i));
  }
  System.out.printf("%10s=%10d\n", "for", (System.nanoTime() - begin));
  System.out.println("测试数组的性能...");
  // 我们再来测试数组
  String[] strArr = new String[number];
  for (int i = 0; i < number; i++) {
  strArr[i] = Integer.toString(i);
  }
  // 我们用foreach方式测试
  begin = System.nanoTime();
  for (String i : strArr) {
  testMethod(i);
  }
  System.out.printf("%10s=%10d\n", "foreach", System.nanoTime() - begin);
  // 第二种,我们用index进行
  begin = System.nanoTime();
  for (int i = 0; i < number; i++) {
  testMethod(strArr[i]);
  }
  System.out.printf("%10s=%10d\n", "for", System.nanoTime() - begin);
  }
  public static void testMethod(String str) {
  }
  }
  import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.List;
  /**
  * 测试JAVA各种循环的性能。
  * for 方式的性能最好,foreach次之,而Iterator循环性能最差。
  *
  * @author 青年人网
  */
  public class TestLoop {
  public static void main(String[] args) {
  int number = 1000000;
  // 我们构造一个列表
  List<String> list = new ArrayList<String>(number);
  for (int i = 0; i < number; i++) {
  list.add(Integer.toString(i));
  }
  System.out.println("测试列表的性能...");
  // 我们用foreach方式测试
  long begin = System.nanoTime();
  for (String i : list) {
  testMethod(i);
  }
  System.out.printf("%10s=%10d\n", "foreach", System.nanoTime() - begin);
  begin = System.nanoTime();
  // 下面我们用Iterator测试
  Iterator<String> it = list.iterator();
  while (it.hasNext()) {
  testMethod(it.next());
  }
  System.out.printf("%10s=%10d\n", "iterator", (System.nanoTime() - begin));
  // 第三种,我们用index进行
  begin = System.nanoTime();
  for (int i = 0; i < number; i++) {
  testMethod(list.get(i));
  }
  System.out.printf("%10s=%10d\n", "for", (System.nanoTime() - begin));
  System.out.println("测试数组的性能...");
  // 我们再来测试数组
  String[] strArr = new String[number];
  for (int i = 0; i < number; i++) {
  strArr[i] = Integer.toString(i);
  }
  // 我们用foreach方式测试
  begin = System.nanoTime();
  for (String i : strArr) {
  testMethod(i);
  }
  System.out.printf("%10s=%10d\n", "foreach", System.nanoTime() - begin);
  // 第二种,我们用index进行
  begin = System.nanoTime();
  for (int i = 0; i < number; i++) {
  testMethod(strArr[i]);
  }
  System.out.printf("%10s=%10d\n", "for", System.nanoTime() - begin);
  }
  public static void testMethod(String str) {
  }
  }
  2 运行结果
  测试列表的性能...
  foreach= 41997864
  iterator= 43951774
  for= 14351289
  测试数组的性能...
  foreach= 1751863
  for= 1484585
  3 结论:
  foreach的性能很一般,for才是最好的,推荐大家使用。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训