增强型for和Iterator学习
1,增强for和对于非集合类(没有实现 Iterable接口)的数组遍历效果一样
2,对于集合类,就是隐式调用迭代器 iterator的遍历,各有各个场合
3,对于arraylist来所,由于数据结构是数据,可以获得get的索引,反而用普通循环速度更快。linkedlist这种基于链表的数据结构,就用增强for速度比较快
List<String> list = new ArrayList<String>();
for (int i = ; i < ; i++) {
list.add("xiaotang");
} long start = System.currentTimeMillis();
int size = list.size();
String str = null;
for (int i = ; 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));
Iterator<Integer> itr = lst.iterator();
while (itr.hasNext())
if (itr.next() % == )
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 % == )
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() % == )
itr.remove(); System.out.println(lst);
}
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
增强型for和Iterator学习的更多相关文章
- 关于Symbol.iterator 学习笔记
1.可以部署在对象上的一个遍历器 2. 遍历器是一个函数,需要返回一个含有一个next 方法的对象 const likeArray = {0:'a', 1: 'b', 2: 'c',3: 'd'. l ...
- STL源码--iterator和traits编程技法
第一部分 iterator学习 STL iterators定义: 提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表达方式. 任何iteartor都应该提供5 ...
- 【转】Java学习之Iterator(迭代器)的一般用法 (转)
[转]Java学习之Iterator(迭代器)的一般用法 (转) 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭 ...
- JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序
前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和A ...
- 2018/2/14 设计模式学习笔记(一) 自己实现ArrayList,LinkedList和Iterator,以及在此过程中对于面向对象,面向接口,还有抽象类的一些思考感悟
因为本人目前为止学习编程不过七个月,所以后面的感悟对于一些大神来说可能嗤之以鼻,但对于一些刚刚入门的萌新来说在理解面向对象的思想上,以及抽象类和接口应该怎么设计等方面应该还是会有所帮助的 首先我们定义 ...
- 设计模式C++学习笔记之十四(Iterator迭代器模式)
14.1.解释 概念:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. main(),客户 IProject,产品接口 CProject,产品类 IIterator,迭代 ...
- [Python学习]Iterator 和 Generator的学习心得
[Python学习]Iterator 和 Generator的学习心得 Iterator是迭代器的意思,它的作用是一次产生一个数据项,直到没有为止.这样在 for 循环中就可以对它进行循环处理了.那么 ...
- php SPL标准库iterator和ArrayAccess的学习
最近在补充学习php基础的时候看到了spl的介绍,学习了一下iterator和arrayAccess的使用,iterator主要是对象的迭代,一般可以用在容器里面,或者工厂模式里面,最常见的应用场景就 ...
- Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor
Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...
随机推荐
- STM32|4-20mA输出电路(转)
源:STM32|4-20mA输出电路 STM32+运算放大器实现VI转换,4mA-20mA发送器
- Django加载静态网页模板
Django加载静态网页模板 步骤: 第一步:在子系统blog根目录下新建模版目录templates,里面新建一个login.html <!DOCTYPE html> <html l ...
- Ubuntu16.04下配置pip国内镜像源加速安装【转】
本文转载自:https://blog.csdn.net/yucicheung/article/details/79095742 问题描述 基于国内网速的问题,我们直接pip安装包通常速度非常慢,而且经 ...
- crontab 定时执行脚本出错,但手动执行脚本正常
原因: crontab 没有去读环境变量,需要再脚本中手动引入环境变量,可以用source 也可以用export 写死环境变量. 为了定时监控Linux系统CPU.内存.负载的使用情况,写了个Shel ...
- Asynchronous Programming Patterns
Asynchronous Programming Patterns The .NET Framework provides three patterns for performing asynchro ...
- 【Java----字符串转义与反转义】
apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils,这个工具类是在2.3版本以上加上的去的,利用它能很方便的进行html,xml ...
- spring boot2 基于百度云apiface实现人脸检测与认证2
接上一篇,上篇只实现了人脸的认证,接下来实现人脸的检测. 原理介绍: 把摄像头抓拍的图像上传到服务器,服务器把图像上传到百度云,百度云返回识别出的人脸的数量和位置,前端根据服务端的返回,在图像中画出人 ...
- Python网络编程(Sockets)
一个简单的服务器 #!/usr/bin/python3 # This is server.py file import socket # create a socket object serverso ...
- Singleton(单例)
意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 适用性: 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代 ...
- MongoDB排序异常
com.mongodb.MongoQueryException: Query failed with error code 96 and error message 'Executor error d ...