概述
@for循环与增强for循环
for与增强for循环的对比
for循环分为两种:
第一种为普通的for循环
这种for循环通常需要三个步骤即 for(初始表达式;条件表达式;递增表达式)有时候递增表达式也可以省去,一般是在使用Iterator迭代时(Iterator的hasNext方法判断时,可以省去递增表达式)。这种for循环很常用。
第二种为增强的for循环(也就是foreach循环)
这种for循环的内部是调用了Iterator实现的(实现了Iterator接口),和Iterator遍历效果是一样(你可以断点调试跟踪代码看看内部原理),主要用于遍历数组、集合的每一个元素。优点是写法简便,无需获得数组、集合长度,也无需根据索引来访问元素。缺点是不能在循环里动态的删除元素和获取元素下标,还有一点,在多线程下使用增强for来改变元素会出错误,因为通过迭代器实现的增强for对该数组或集合会现有一个拷贝,改变元素是会导致不能正常遍历数组和集合。所以说多线程下增强for循环是不安全不推荐用。
区别
(1)对于非集合类(没有实现 Iterable接口的)的数组遍历,增强型for循环和普通循环遍历原理相同,效率基本相同
(2)对于集合类(实现了Iterable接口的),增强型for循环的遍历其本质就是迭代器 iterator的遍历,和普通循环遍历相比,各自有自己适用的场景,比如说普通for循环比较适合List类(数组类)遍历通过下标查找数据的,而增强型for循环则比较适合链表结构的集合的遍历。
遍历非集合类
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
遍历集合类
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循环for与增强for循环的对比的全部内容,希望文章能够帮你解决for循环与增强for循环for与增强for循环的对比所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复