Iterator使用及ArrayList遍历注意事项
来源:互联网 发布:淘宝宝贝分类在哪里 编辑:程序博客网 时间:2024/05/22 03:07
Iterator使用及ArrayList遍历注意事项
(一)Iterator
- Iterator接口是java集合框架成员,Iterator主要用于遍历Collection集合中的元素,Iterator对象也被称为迭代器。
- Iterator接口隐藏了各种Collection实现类的底层细节,功能比较简单,并且只能单向移动。
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
(二)ArrayList遍历注意事项
- 【切记】Iterator对象的remove方法是迭代过程中删除元素的唯一方法
- 下面我们来看ArrayList遍历中的陷阱:
import java.util.ArrayList;public class ArrayListRemove { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("c"); list.add("c"); remove(list); for (String s : list) { System.out.println("element : " + s); } } public static void remove(ArrayList<String> list) { // TODO: }
如果要想删除list的b字符,有下面两种常见的错误例子:
- 错误写法实例一:
public static void remove(ArrayList<String> list) { for (int i = 0; i < list.size(); i++) { String s = list.get(i); if (s.equals("b")) { list.remove(s); } } }
错误的原因:这种最普通的循环写法执行后会发现第二个“b”的字符串没有删掉。
错误写法实例二:
public static void remove(ArrayList<String> list) { for (String s : list) { if (s.equals("b")) { list.remove(s); } } }
错误的原因:这种for-each写法会报出著名的并发修改异常:java.util.ConcurrentModificationException。
-先解释一下实例一的错误原因:针对错误写法一,在遍历第一个字符串b时因为符合删除条件,所以将该元素从数组中删除,并且将后一个元素移动(也就是第二个字符串b)至当前位置,导致下一次循环遍历时后一个字符串b并没有遍历到,所以无法删除。针对这种情况可以倒序删除的方式来避免:
public static void remove(ArrayList<String> list) { for (int i = list.size() - 1; i >= 0; i--) { String s = list.get(i); if (s.equals("b")) { list.remove(s); } } }
因为数组倒序遍历时即使发生元素删除也不影响后序元素遍历。
对于第二种的解释是:在对Collection类进行迭代时,要调用删除元素时必须调用Iterator的remove()方法,而不能调用Collection的remove()方法。所以正确的迭代方法是下面的代码所示:
public static void remove(ArrayList<String> list) { Iterator it = list.iterator(); while(it.hasNext()){ String s = it.next(); if( s.equals("b")){ it.remove(); } } }
0 0
- Iterator使用及ArrayList遍历注意事项
- 迭代Iterator结合ArrayList集合的使用及基本使用,再看迭代Iterator原理
- 通过Iterator提高ArrayList的遍历效率
- arraylist结合iterator使用实例
- 使用Iterator遍历hashmap
- 黑马程序员---------------------创建ArrayList对象,添加5个元素,使用Iterator遍历输出
- "黑马程序员"基础测试:创建ArrayList对象,添加五个元素,使用Iterator遍历输出
- "黑马程序员"基础测试:创建ArrayList对象,添加五个元素,使用Iterator遍历输出
- 创建ArrayList对象,添加5个元素,使用Iterator遍历输出
- java ArrayList与LinkedList 使用for,forearch,Iterator的遍历效率
- ArrayList使用与遍历
- 使用ArrayList集合,对其添加10个不同的元素,并使用Iterator遍历该集合
- Map使用Iterator遍历输出
- 使用Lambda表达式遍历Iterator
- ArrayList遍历及效率比较
- ArrayList和Iterator的初步使用(二)
- ArrayList和Iterator的初步使用(一)
- 遍历ArrayList,Iterator和for循环哪个更快?
- CentOS---网络配置详解
- Ra
- reading environment variable python
- HDU 4283 You Are the One(区间dp)
- JAVA字符串格式化
- Iterator使用及ArrayList遍历注意事项
- 【封装】WriteToFile——数据写入文件
- 迁移学习资源整理
- Windows系统搭建Hexo环境
- 附上一段操作数据库的代码片
- 数据库实例
- 虚拟机下Ubuntu安装usb转串口驱动
- Android DiskLruCache的用法详解
- C++编程规范