1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 普通For循环和增强For循环

普通For循环和增强For循环

时间:2019-05-01 06:02:54

相关推荐

普通For循环和增强For循环

目录

定义

代码演示

总结

定义

普通for循环

步骤:初始表达式;条件表达式;递增表达式)

有时候递增表达式也可以省去,一般是在使用Iterator迭代时(Iterator的hasNext方法判断时,可以省去递增表达式)。这种for循环很常用。

增强的for循环:

这种for循环的内部是调用了Iterator实现的(实现了Iterator接口),和Iterator遍历效果是一样(你可以断点调试跟踪代码看看内部原理),主要用于遍历数组、集合的每一个元素。

优点:1.写法简便 2.无需获得数组、集合长度 3.无需索引来访问元素

缺点:1.不能在循环动态删除元素和获取元素下标 2.在多线程下使用增强for来改变元素会出错误,因为通过迭代器实现的增强for对该数组或集合会现有一个拷贝,改变元素是会导致不能正常遍历数组和集合。所以说多线程下增强for循环是不安全不推荐用。

区别:(1)对于非集合类(没有实现 Iterable接口的)的数组遍历,增强型for循环和普通循环遍历原理相同,效率基本相同

(2)对于集合类(实现了Iterable接口的),增强型for循环的遍历其本质就是迭代器 iterator的遍历,和普通循环遍历相比,各自有自己适用的场景,比如说普通for循环比较适合List类(数组类)遍历通过下标查找数据的,而增强型for循环则比较适合链表结构的集合的遍历。

代码演示

1.遍历集合类

public static void main(String[] args) {person[] listtest =new person[5000000];int [] a= new int[600000];for (int i = 0; i < 600000; i++) {a[i]=i;}int b=0;long ts=System.currentTimeMillis();for(int i=0;i<a.length;i++){b=a[i];}System.out.println("普通for的耗用时间 "+(System.currentTimeMillis()-ts));long ts1=System.currentTimeMillis();for(int i:a){b=i;}System.out.println("增强for的耗用时间 "+(System.currentTimeMillis()-ts1));for(int i=0;i<5000000;i++){listtest[i]= new person("狗蛋");}Object p=null;long start=System.currentTimeMillis();for(int i=0;i<listtest.length;i++){p=listtest[i];}System.out.println("普通for的耗用时间 "+(System.currentTimeMillis()-start));long start1=System.currentTimeMillis();for(Object o:listtest){p=o;}System.out.println("增强for的耗用时间 "+(System.currentTimeMillis()-start1));}}class person{String name;public person(String name) {super();this.name = name;}}

输出结果:

普通for的耗用时间 10

增强for的耗用时间 11

普通for的耗用时间 5

增强for的耗用时间 4

2.遍历非集合类

List<String> list = new ArrayList<String>();for (int i = 0; i < 500000; i++) {list.add("翠芬");}long start2 = System.currentTimeMillis();String str = null;for (int i = 0; i < list.size(); i++) {str = list.get(i);}System.out.println("普通for循环+get方法: "+ (System.currentTimeMillis() - start2));long start3 = System.currentTimeMillis();for (String str1 : list) {str=str1;}System.out.println("增强for循环+赋值:"+ (System.currentTimeMillis() - start3));List<String> list1 = new LinkedList<String>();for (int i = 0; i < 50000; i++) {list1.add("菜花");}long start4 = System.currentTimeMillis();String str1 = null;for (int i = 0; i < list1.size(); i++) {str1=list1.get(i);}System.out.println("普通for循环+get方法: "+ (System.currentTimeMillis() - start4));long start5 = System.currentTimeMillis();for (String str2 : list1) {str1=str2;}System.out.println("增强for循环+赋值:"+ (System.currentTimeMillis() - start5));

输出结果:

普通for循环+get方法: 8

增强for循环+赋值:8

普通for循环+get方法: 893

增强for循环+赋值:2

总结

相对于for(;;)而言 增强for循环有两个好处:

1.写起来简单

2.遍历集合、容器简单

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。