首页 > 编程 > Java > 正文

java之Iterator

2019-11-09 21:08:28
字体:
来源:转载
供稿:网友

1.概念

Iterator接口 迭代对于我们搞java的来说绝对不陌生。我们常常使用JDK提供的迭代接口进行Java集合的迭代。

Iterator iterator = list.iterator(); while(iterator.hasNext()){ String string = iterator.next(); //do something }

迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式。Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。 在没有迭代器时我们都是这么进行处理的。如下:

对于数组我们是使用下标来进行处理的:

int[] arrays = new int[10]; for(int i = 0 ; i < arrays.length ; i++){ int a = arrays[i]; //do something }

对于ArrayList是这么处理的:

List<String> list = new ArrayList<String>(); for(int i = 0 ; i < list.size() ; i++){ String string = list.get(i); //do something }

对于这两种方式,我们总是都事先知道集合的内部结构,访问代码和集合本身是紧密耦合的,无法将访问逻辑从集合类和客户端代码中分离出来。同时每一种集合对应一种遍历方法,客户端代码无法复用。 在实际应用中如何需要将上面将两个集合进行整合是相当麻烦的。所以为了解决以上问题,Iterator模式腾空出世,它总是用同一种逻辑来遍历集合。使得客户端自身不需要来维护集合的内部结构,所有的内部状态都由Iterator来维护。客户端从不直接和集合类打交道,它总是控制Iterator,向它发送”向前”,”向后”,”取当前元素”的命令,就可以间接遍历整个集合。

2.方法

Iterator接口也是Java集合框架的成员,但它与Collection系列、Map系列的集合不一样:Collection系列集合、Map系列集合主要用于盛装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。 Iterator接口里定义了如下4个方法:  –boolean hasNext():如果被迭代的集合还元素没有被遍历,则返回true。  –Object next():返回集合里下一个元素。  –void remove() :删除集合里上一次next方法返回的元素  –void forEachRemaining(Consumer action),这是Java 8为Iterator新增的默认方法,该方法可使用Lambda表达式来遍历集合元素。

3.实例

public static void main(String[] args) { // 创建集合、添加元素的代码与前一个程序相同 HashSet books = new HashSet(); //List books = new ArrayList(); //Collection books = new HashSet(); books.add("轻量级Java EE企业应用实战"); books.add("疯狂Java讲义"); books.add("疯狂Android讲义"); // 获取books集合对应的迭代器 Iterator it = books.iterator(); while(it.hasNext()) { // it.next()方法返回的数据类型是Object类型,因此需要强制类型转换 String book = (String)it.next(); System.out.PRintln(book); if (book.equals("疯狂Java讲义")) { // 从集合中删除上一次next方法返回的元素 it.remove(); } // 对book变量赋值,不会改变集合元素本身 book = "测试字符串"; //① } System.out.println(books); }}

3.2.


上一篇:Java 集合类汇总

下一篇:java8 HashMap解析

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表