Iterator接口
在程序开发中,经常需要遍历集合中的所有元素。
针对这种需求,JDK专门提供了一个接口 java.util.Iterator 。
Iterator 接口也是Java集合中的一员,但它与 Collection 、 Map 接口有所 不同, Collection 接口与 Map 接口主要用于存储元素,而 Iterator 主要用于迭代访问(即遍历) Collection 中的元素,因此 Iterator 对象也被称为迭代器。
想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作,下面介绍一下获取迭代器的方 法:
public Iterator iterator() //获取集合对应的迭代器,用来遍历集合中的元素的。只能单向移动
Iterator接口的常用方法:
public E next() :返回迭代的下一个元素。
public boolean hasNext() :如果仍有元素可以迭代,则返回 true。
Iterator接口还有删除方法:但是一般不使用
public void remove():从底层集合中移除此迭代器返回的最后一个元素(可选操作)。
迭代器本身的remove()方法,是在迭代过程中修改集合唯一安全的方式;如果在迭代过程中以任何其它的方式(例如集合本身的删除方法)修改集合将会产生未知的行为。
ArrayList<String> arrs = new ArrayList<String>(); Iterator<String> it = arrs.iterator(); while (it.hasNext()) { String arr = it.next(); if (表达式) { it.remove(); // 此方法必须在next()方法调用过后调用。 一次next()方法,一次remove(),否则抛异常
} }
迭代:即Collection集合元素的通用获取方式。
在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
迭代器的实现原理
当遍历集合时,首先通过调用t集合的 iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。
ListIterator接口
ListIterator接口是List提供的一个特殊的迭代器,除了Iterator接口提供的正常操作外,还允许元素插入和替换以及双向访问。
方法:
| 变量和类型 | 方法 | 描述 |
|---|---|---|
void |
add(E e) |
将指定的元素插入列表(可选操作)。
|
boolean |
hasNext() |
如果此列表迭代器在向前遍历列表时具有更多元素,则返回
true 。 |
boolean |
hasPrevious() |
如果此列表迭代器在反向遍历列表时具有更多元素,则返回
true 。 |
E |
next() |
返回列表中的下一个元素并前进光标位置。
|
int |
nextIndex() |
返回后续调用
next()将返回的元素的索引。 |
E |
previous() |
返回列表中的上一个元素并向后移动光标位置。
|
int |
previousIndex() |
返回后续调用
previous()将返回的元素的索引。 |
void |
remove() |
从列表中删除
next()或 previous() (可选操作)返回的最后一个元素。 |
void |
set(E e) |
用指定的元素替换
next()或 previous()返回的最后一个元素(可选操作)。 |
previous方法向前遍历,next方法向后遍历,使用previous方法之前必须先调用next方法,不然本身光标处在最开头的位置,不能往前移动。
增强for
增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。
它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
格式:
for(元素的数据类型 变量 : Collection集合or数组){ //操作代码 }
它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。 其必须有被遍历的目标,目标只能是Collection或者是数组。增强for仅仅作为遍历操作出现。
posted on
浙公网安备 33010602011771号