我是靠谱客的博主 聪慧夕阳,这篇文章主要介绍迭代器和for循环的效率比较,现在分享给大家,希望可以做个参考。

 

实体Person类

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

 

package com.zhang.loop;

public class Person {  private String a;  private int b;  public Person(String a, int b) {   super();   this.a = a;   this.b = b;  }  public String getA() {   return a;  }  public void setA(String a) {   this.a = a;  }  public int getB() {   return b;  }  public void setB(int b) {   this.b = b;  }     }

 

 

 

测试ArrayList的主程序

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.zhang.loop; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class TestArrayList { private static final int COUNT = 800000; private static List<Person> persons = new ArrayList<Person>(); public static void main(String[] args) { init(); System.out.println("for循环测试结果:"+testFor()); System.out.println("foreach循环测试结果:"+testForeach()); System.out.println("iterator循环测试结果:"+testIterator()); } //初始化集合 public static void init(){ for (int i = 0; i <COUNT; i++) { persons.add(new Person("第"+i+"个元素",i)); } } //for循环便利集合 public static long testFor(){ long start = System.nanoTime(); Person p = null; for (int i = 0; i < persons.size(); i++) { p = persons.get(i); } return (System.nanoTime()-start)/1000; } //foreach循环便利集合 public static long testForeach(){ long start = System.nanoTime(); Person p = null; for (Person person : persons) { p = person; } return (System.nanoTime()-start)/1000; } //iterator循环便利集合 public static long testIterator(){ long start = System.nanoTime(); Person p = null; Iterator<Person> itreator = persons.iterator(); while(itreator.hasNext()){ p = itreator.next(); } return (System.nanoTime()-start)/1000; } }

 

 ArrayList测试结果

 

 

测试LinkedList的主程序

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.zhang.loop; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class TestArrayList { private static final int COUNT = 8000; private static List<Person> persons = new LinkedList<Person>(); public static void main(String[] args) { init(); System.out.println("for循环测试结果:"+testFor()); System.out.println("foreach循环测试结果:"+testForeach()); System.out.println("iterator循环测试结果:"+testIterator()); } //初始化集合 public static void init(){ for (int i = 0; i <COUNT; i++) { persons.add(new Person("第"+i+"个元素",i)); } } //for循环便利集合 public static long testFor(){ long start = System.nanoTime(); Person p = null; for (int i = 0; i < persons.size(); i++) { p = persons.get(i); } return (System.nanoTime()-start)/1000; } //foreach循环便利集合 public static long testForeach(){ long start = System.nanoTime(); Person p = null; for (Person person : persons) { p = person; } return (System.nanoTime()-start)/1000; } //iterator循环便利集合 public static long testIterator(){ long start = System.nanoTime(); Person p = null; Iterator<Person> itreator = persons.iterator(); while(itreator.hasNext()){ p = itreator.next(); } return (System.nanoTime()-start)/1000; } }

 

LinkedList测试结果:


 

记录的存取方式有两种:

             一种是顺序存储(数组,ArrayList..)可以根据其下标找到对应的记录

            另一种是链接存储(LinkedList..)链接存储(拿单链表为例)则必须找到其前一个记录的位置才能够找到本记录。

 

根据以上可以得到的结果是:for循环便于访问顺序存储的记录,而foreach和迭代器便于访问链接存储。

               

最后

以上就是聪慧夕阳最近收集整理的关于迭代器和for循环的效率比较的全部内容,更多相关迭代器和for循环内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部