您的位置:首页 > 编程语言 > Java开发

java基础:13.2 集合框架 - Iterator、Iterable

2019-04-03 20:30 197 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/L20902/article/details/89004289

1、Iterable

Iterable英文意思为:可迭代的、迭代器、可遍历的.

Iterable接口是java 集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素
Iterable 接口中定义了iterator方法,该方法会返回一个迭代器。Iterator 接口提供了遍历合集中元素的方法。

修饰符和返回值 方法名 描述
Iterator iterator() 返回一个内部元素为T类型的迭代器
default void forEach(Consumer<? super T> action) 对内部元素进行遍历,并对元素进行指定的操作
default Spliterator spliterator() 创建并返回一个可分割迭代器
Iterator<Integer> iterator=list.iterator();  //获取ArrayList内部迭代器
while(iterator.hasNext()){                   //hasNext()方法判断是否还有元素
System.out.println(iterator.next(<
4000
span class="token punctuation">));     //next()返回当前元素,并且将指针移向下个元素

还可以使用"for-each loop"形式进行遍历,增强for形式在Java中只是一个语法,实际编译的时候,还是会转换为迭代器形式,

for (Integer integer : list) {
System.out.println(integer);
}

进行迭代遍历的时候我们需要注意在遍历的过程中,如果我们对元素进行添加删除,那么会造成并行修改异常(ConcurrentModificationException)!!
对于这种情况,我们应当使用迭代器Iterator内部的remove()方法,而不是使用集合list直接删除元素。

     Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer i = iterator.next();
if (i == 2) {
list.remove(i); /* 错误写法!*/
iterator.remove();  /* 正确做法! */
}
}

如果我们自己想自己写一个集合,实现Iterable接口,并可以使用"for-each loop"形式遍历,那么我们需要自己来重写一个迭代器(Iterator)并返回它。

public class MyCollection<E> implements Iterable<E> {
@Override
public Iterator iterator() {
return new MyIterator();
}

private class MyIterator implements Iterator<E>{
@Override
public boolean hasNext() {
return false;
}
@Override
public E next() {
return null;
}
}
}

 
 

2、迭代器Iterator

每种合集都是可迭代的(Iterable) 。可以获得集合的

Iterator
对象来遍历合集中的所有元素。

Iterator 是一种经典的设计模式,用于在不需要暴露数据是如何保存在数据结构的细节的情况下,来

遍历一个数据结构

Collection 接口继承自 Iterable 接口。
Iterable 接口中定义了iterator方法,该方法会返回一个迭代器。Iterator 接口提供了遍历合集中元素的方法。
iterator()方法返回一个Iterator 的实例。用next()方法提供对合集中元素的顺序访问

for (Iterator<Hero> iterator = heros.iterator(); iterator.hasNext();) {
Hero hero = (Hero) iterator.next();
System.out.println(hero);
}

or
// 向后遍历
Iterator<Strting> iterator = list.iterator();
while(iteator.hasNext())
System.out.print(iterator.next().toUpperCase() + "  ");
System.out.println();

//向前遍历
iterator= list.iterator(list. size());
while (iterator.hasPrevious()) {
System . out.print(iterator.previous() + " ") ;
}

 
 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: