博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
增强for循环和普通for循环的区别
阅读量:6431 次
发布时间:2019-06-23

本文共 1679 字,大约阅读时间需要 5 分钟。

hot3.png

今天在阿里开发手册中看到;

162422_Vl5z_1995134.png

结果实验结果是: 1,2顺序没有问题,正常执行, 但如果把顺序调换,则提示

162601_woSM_1995134.png

 

原因: 

调用list.remove()方法导致modCount和expectedModCount的值不一致。

modCount值是什么:  其list源码里,初始数组长度, 

expectedModCount 则是每次修改叠加值, 因为初始化为2,比对下标时获取不一致而抛出的异常;

 

以上得出:增强for循环的内部也就是调用iteratoer实现的(可以查看编译后的文件),但是增强for循环 ,不能在增强循环里动态的删除集合内容。不能获取下标等

关于性能

这里用100000个数组循环测试

public static void main(String[] args) throws ParseException {		List
tempList = new ArrayList
(); for (int i = 0; i < 100000; i++) { tempList.add(55); } /** * 普通循環 */ long start = System.currentTimeMillis(); int size = tempList.size(); int c1 = 1; for (int i = 0; i < size; i++) { c1 = tempList.get(i); } System.out.println("for + get(i)方法: " + (System.currentTimeMillis() - start)); /** * 增強循環 */ long start2 = System.currentTimeMillis(); for (int c2 : tempList) { //c1 = c2; } System.out.println("Iterator(foreach)方法:" + (System.currentTimeMillis() - start2)); }

 

普遍结果:

163828_cwy3_1995134.png

查询普通循环更快一点 ;

这里是拿ArrayList 做测试,当拿出LinkList时,得出以下结果

164258_oJ9A_1995134.png

查询增强循环更快一点 ;

对于数组的结论:

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

对于循环的结论那就不言而喻了, 循环没有好坏,只有适合的循环才是好循环;

 

关于删除

推荐使用iterator

public static void main(String[] args) throws ParseException {		List
list = new ArrayList
(); list.add("a1"); list.add("a2"); list.add("a3"); list.add("a4"); list.add("a5"); Iterator
it = list.iterator(); while (it.hasNext()) { String v = it.next(); if ("a2".equals(v)) { it.remove(); } } for (String v : list) { System.out.println(v); } }

运行结果:

165232_h6sw_1995134.png

 

转载于:https://my.oschina.net/java1314/blog/908265

你可能感兴趣的文章
Eclipse内存不够解决办法
查看>>
关于tbody js取法兼容。
查看>>
[CC]点云密度计算
查看>>
CATransition 动画处理视图切换
查看>>
[转载] 高等应用数学问题的matlab求解——第3章 微积分问题的计算机求解
查看>>
大整数比较大小
查看>>
C++ 指定路径文件夹存在与否查询及文件夹创建
查看>>
八大排序算法的Java实现
查看>>
IDEA+Maven+Tomcat构建项目流程
查看>>
数据是重要的战略资源,数据同样是产品非常重要的组成部分。淘宝对中国最大的贡献,不只是方便了老百姓购物,而是把中国消费者的消费习惯数据慢慢沉淀下来。...
查看>>
Leetcode Find Minimum in Rotated Sorted Array
查看>>
Python接口测试-使用requests模块发送post请求
查看>>
System.currentTimeMillis()计算方式与时间的单位转换
查看>>
Extra:Variable Types
查看>>
js传参时,没有参数传入,默认值的设置
查看>>
ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程Thread中委托的使用(六)...
查看>>
最新整理知识结构图
查看>>
linux安装mysql
查看>>
flask 2 进阶
查看>>
sentences in movies and teleplays[1]
查看>>