1,增强for和对于非集合类(没有实现 Iterable接口)的数组遍历效果一样

2,对于集合类,就是隐式调用迭代器 iterator的遍历,各有各个场合

3,对于arraylist来所,由于数据结构是数据,可以获得get的索引,反而用普通循环速度更快。linkedlist这种基于链表的数据结构,就用增强for速度比较快

 List<String> list = new ArrayList<String>();for (int i = 0; i < 500000; i++) {list.add("xiaotang");}long start = System.currentTimeMillis();int size = list.size();String str = null;for (int i = 0; i < size; i++) {str = list.get(i);}System.out.println("for + get(i)方法: "+ (System.currentTimeMillis() - start));long start2 = System.currentTimeMillis();for (String str1 : list) {}System.out.println("Iterator(foreach)方法:"+ (System.currentTimeMillis() - start2));

View Code

   Iterator<Integer> itr = lst.iterator(); while (itr.hasNext()) if (itr.next() % 2 == 0) itr.remove(); add/get/remove

4,增强for获得实例,不能再循环中删除,否则有异常,原理:foreach引用了iterator,调用hasnext和next方法,在外面remove会改变iterator的expectModeCount和list的modcount不同步),

iterator就有remove方法直接删除(expectCount会自动同步),要想添加就要用原始的for,或者迭代器的删了再加,保存平衡,foreach尽量只读

参考:https://my.oschina.net/itblog/blog/422649

以下例子证明第一点
①     public static void removeEvensVer2(List<Integer> lst) { for (Integer x : lst) if (x % 2 == 0) lst.remove(x); System.out.println(lst); } ②     public static void removeEvensVer3(List<Integer> lst) { Iterator<Integer> itr = lst.iterator(); while (itr.hasNext()) if (itr.next() % 2 == 0) itr.remove(); System.out.println(lst); } 

View Code


5,map有4种方法,1,map.entrySet(),2,map.keySet()和map.values(),3,Iterator,4,通过keySet来便利

总结:键值都有用1,仅仅键或者值用2,删除用iterator

参考,https://www.cnblogs.com/lchzls/p/6714689.html

真正的:https://blog.csdn.net/tjcyjd/article/details/11111401

转载于:https://www.cnblogs.com/vhyc/p/9363652.html

增强型for和Iterator学习相关推荐

  1. Python Iterator 学习小记

    Python Iterator 学习小记 The reference link: Implicit sequences by cs61a Iterator Python提供了一种统一的方式来顺序处理容 ...

  2. 基于深度学习的端到端人脸识别技术:全面调研

    44页,共计371篇参考文献.本文全面介绍了端到端深度学习人脸识别技术,包括人脸检测,人脸预处理和人脸表征等方向,详细介绍了最新的算法设计,评估指标,数据集,性能比较等. The Elements o ...

  3. 语义分割源代码_综述 | 基于深度学习的实时语义分割方法:全面调研

    34页综述,共计119篇参考文献.本文对图像分割中的最新深度学习体系结构进行了全面分析,更重要的是,它提供了广泛的技术列表以实现快速推理和计算效率. A Survey on Deep Learning ...

  4. 初学者如何学习单片机

    初学者如何学习单片机(转载讲述老百姓自己的故事) 今天跟大家讲述一下我是如何学习单片机技术的,以及对于初学者应该怎样学习,谈谈自己的看法! 我是电子系的03届学生,当时进入我们创新院的时候,也是什么都 ...

  5. resnet论文_ResNet还是DenseNet?即插即用的DS涨点神器来了!

    DSNet比ResNet取得了更好的结果,并且具有与DenseNet相当的性能,但需要的计算资源更少.其中改进的DS2Res2Net性能非常强大. 作者:ChaucerG Date:2020-10-2 ...

  6. pytorch 语义分割loss_Recall Loss:用于不平衡图像分类和语义分割的召回损失

    本文针对不平衡图像分类和语义分割问题,提出了一种基于度量召回的新损失函数:Recall Loss,很好地平衡了精度和准确性,可显著提高不平衡图像分类和不平衡语义分割任务的性能. Recall Loss ...

  7. cv图像翻转_涨点技巧!汇集13个Kaggle图像分类项目的性能提升指南

    从数据预处理.增强.模型优化.调参再到损失函数... 本文转载自:AI公园 作者:Prince Canuma 编译:ronghuaiyang 注:文末附CV学习交流群 导读 覆盖了模型相关的方方面面, ...

  8. 有监督学习和无监督学习_比监督学习做的更好:半监督学习

    近期大热的半监督学习! 本文转载自:AI公园 作者:Andre Ye | 编译:ronghuaiyang注:文末附CV学习交流群. 导读 为什么半监督学习是机器学习的未来. 监督学习是人工智能领域的第 ...

  9. 04-Spark入门

    04-Spark入门 1.目标 只要学不死,就往死里学 2.spark概述 2.1.什么是spark spark是基于内存的快速.通用.可扩展的大数据分析计算引擎.它的计算速度非常快.但是仅仅只涉及到 ...

最新文章

  1. Iso时间转java instant,在java.util.Date和java.time.Instant之间转换古代日期时的差异
  2. Setting Up Tomcat For Remote Debugging
  3. python智能办公系统_用 Python 自动化办公能做到哪些有趣或有用的事情?
  4. Python Qt GUI快速编程第六章代码分析
  5. 计算 的程序java_数学表达式计算程序(java)
  6. Nginx负载均衡实现之四层与七层负载
  7. 像搭“乐高”一样实现整合式网络安全体系
  8. “2021-01-30T16:00:00.000Z“: expected format “yyyy-MM-dd HH:mm:ss“时间戳格式化
  9. php 修改图像大小,PHP图像大小调整
  10. Why Helm? - 每天5分钟玩转 Docker 容器技术(160)
  11. 【C语言】排序详解——冒泡排序
  12. argmin ,argmax函数
  13. 手把手教你整合SSM实现一个简单的CRUD项目
  14. python编写木马攻击_Python编写简易木马程序
  15. FOTOO-疫情下,企业如何线上组织活动,输出企业文化
  16. Autojs-QQ每日定时给女票/男票/闺蜜/基友发送一句话
  17. Android.mk文件语法规范及使用模板
  18. iOS开发-DES加密解密算法
  19. 标贝科技登全球语音大赛舞台Blizzard Challenge做精彩开场发言
  20. 手把手带你YOLOv5 (v6.1)添加注意力机制(二)(在C3模块中加入注意力机制)

热门文章

  1. CentOS下二进制包/源码安装方式的MySQL卸载步骤
  2. html js php 混编,Razor标记语言和HTML,js混编
  3. 源码包编译PHP5.6,源码编译安装php5.6
  4. Excel批量转为Html,Html转换成Excel
  5. [Java] Welcome to Artifactory 使用说明
  6. 嵌入式系统开发怎样快速度入门
  7. Index of XML
  8. MySQLWorkbench注释
  9. 论林耐斯-Linux系统的重要性
  10. ubuntu下 mysql安装以后无法登陆的的解决方法((ERROR 1698 (28000): Access denied for user 'root'@'localhost'))...