JDK1.5 为增强for循环而生的 Iterable接口

迭代器(Iterator)概念:

在java里面有一个接口:Iterator。

java里面有很多集合,每种集合元素存储的方式不一样,取的方式可能也不一样。每一个都学习怎么获取很不现实,这时候就出现了迭代器,实现了Iterator迭代器接口的集合 就有了统一的功能 迭代(遍历)

如何获得一个迭代器

1.因为迭代器是Java为了给集合(and数组)给定统一的遍历的行为规范,所以Collection接口继承了Iterable接口。

public interface Iterable<T>
实现这个接口允许对象成为 "foreach" 语句的目标。
从以下版本开始:
1.5
Iterable接口中唯一的一个抽象方法

方法摘要

 Iterator<T>

iterator()
          返回一个在一组 T 类型的元素上进行迭代的迭代器。

2.并且继承了Iterable接口中的抽象方法,交给Collection的子类去实现

 Iterator<E>

iterator()
          返回在此 collection 的元素上进行迭代的迭代器。

返回类型 应该是一个迭代器的实现类的对象。但这里使用了接口的多态  Iterator接口去引用这个对象 ,无需关注具体这个对象是什么,因为我们的关注重心不在Iterator接口的实现类对象  而在于获得到的这个迭代器对象。

terator<T> iterator()返回一个在一组 T 类型的元素上进行迭代的迭代器。

返回:

一个迭代器。

迭代器中的方法

方法摘要
 boolean hasNext()
          如果仍有元素可以迭代,则返回 true。
 E next()
          返回迭代的下一个元素。
 void remove()
          从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

共有三个抽象方法,我们学习两个:

hasNext

boolean hasNext()

如果仍有元素可以迭代,则返回 true。(换句话说,如果 next 返回了元素而不是抛出异常,则返回 true)。

返回:

如果迭代器具有多个元素,则返回 true。

next

E next()

返回迭代的下一个元素。

返回:

迭代的下一个元素。

抛出:

NoSuchElementException - 没有元素可以迭代。


Iterator的实现过程

当执行coll.iterator();时,会创建一个指针,指向-1的位置。

当执行it.hasNext()时,会判断指针指的位置有没有下一个元素。

当执行it.next()时,首先把下一个元素取出来,然后指针往后移动一位。只有执行next()时,指针才往后移动。
 

迭代器的并发修改异常

在使用迭代器进行遍历的时候,不允许修改集合的长度。否则会报:java.util.ConcurrentModificationException。不改长度是指不能进行增删元素的操作,但是可以改元素。

参考:https://blog.csdn.net/Hurricane_m/article/details/89290154  原因 以及对应了解决办法

增强for循环

增强的for循环是jdk1.5新特性。

jdk1.5之后,出现了新的接口java.lang.Iterable,Collection开始继承Iterable。而Iterable接口出现目的就是为了实现增强的for循环。

凡是见到的集合,还有数组,都可以使用增强for循环。

参考:https://blog.csdn.net/Hurricane_m/article/details/89259201

猜你喜欢

转载自blog.csdn.net/Hurricane_m/article/details/89308032