iterator、for遍历集合的优缺点
来源:互联网 发布:淘宝网男运动套装 编辑:程序博客网 时间:2024/05/21 00:51
对于在内存中存储空间为连续的集合,如ArrayList、数组,可以采用以下三种方式进行遍历:
1、iterator
迭代器遍历方式, 适用于连续内存存储方式,比如数组、 ArrayList(其实 ArrayList底层实现也是数组形式)。 缺点是只能从头开始遍历, 优点是可以边遍历边删除。
例如:
Iterator iter = list.iterator();
while(iter.hasNext()){
Object o = iter.next();
if(o.equals("a")){
iter.remove();
}
}
2、for each遍历
底层实现也是基于iterator,所以也只能从头开始遍历,性能上比iterator要稍慢一些,因为多了一层类型自动转换。
3、for list.size方式遍历
这种方式遍历比较灵活,可以指定位置开始遍历。性能最高,但是使用不太优雅,每次都需要在应用程序中手动强转和额外的获得list.size,这样就会导致产生额外的代码。
基于for方式的遍历,还有一个缺点就是遍历过程中不允许删除元素,否则会抛ConcurrentModificationException。 如下:
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//list.remove(1);
Iterator iter = list.iterator();
for(String s:list){
if(s.equals("b")){
list.remove(s);
}
}
为什么用iterator删除元素不抛异常,而用for删除会抛异常呢?
这主要是因为arraylist每次遍历的时候会去判断该集合是否被修改过,调用的方法是checkForComodification()。 如果被修改过ConcurrentModificationException异常。
如何判断是否修改呢,主要是通过维护2个变量来实现,modCount记录了修改次数,expectedModCount记录期望修改次数。 通过iterator.remove()进行的删除操作,会同时修改modCount、ConcurrentModificationException; 而通过list.remove(object/index),则只会修改modCount。 这也是fast-fail机制。
阅读全文
0 0
- iterator、for遍历集合的优缺点
- 关于java list集合的for遍历和Iterator遍历的随想
- for循环 增强for循环 iterator遍历集合的区别与用法
- Java集合的遍历Iterator的方法
- 三中遍历数组和集合的方法 for foreach iterator
- Iterator迭代器的使用,对for和while对集合遍历并排
- 集合的遍历:Iterator接口、foreach
- 黑马程序员------集合的遍历Iterator/ListIterator
- Iterator 关键字,用于集合的遍历
- Iterator iterator():迭代器,集合的专用遍历方式
- java集合与数组遍历-iterator和for方法
- 使用迭代器Iterator和增强for循环如何遍历集合
- 集合框架-for、foreach、Iterator三种遍历方法
- iterator遍历集合解析
- iterator 遍历集合
- Struts2 iterator遍历集合
- 集合遍历 Iterator Foreach
- Iterator遍历集合特点
- 笔记5——shell基础
- Linux----sshd服务
- 2017 多校 TrickGCD
- Dubbo 程序实例
- 为什么使用where 1 =1 或者 where 1 = 0
- iterator、for遍历集合的优缺点
- JAVA微信公众号开发之二维码的创建与获取
- 小e开发板(esp8266)连接Arduino实现WiFi扫描
- 1.7 HashMap源码分析
- 将SqlServer表转换为Markdown
- LeetCode 9. Palindrome Number
- C
- HDU 6053 TrickGCD 莫比乌斯反演||筛法
- linux绑定双网卡配置及各模式数据流量传输方式