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() + " ") ; }
相关文章推荐
- JAVA基础再回首(十四)——集合框架、Collection接口、迭代器Iterator、List接口、ListIterator列表迭代器
- java - 集合框架(一)区分 Iterator 接口 和 Iterable接口
- 黑马程序员——JAVA基础------集合框架(三)----Iterator
- Java框架集合:Collection<E>、Iterable<T>和Iterator<E>接口
- Java基础-集合框架2 Collection和Iterator接口
- 黑马程序员-Java语言基础– 集合框架 第14天
- java基础-- 集合框架入门 及 List集合
- 黑马程序员_Java基础04_集合框架
- Java基础之集合框架(三)--Map、HashMap、TreeMap
- Java基础——集合框架
- 黑马程序员_Java基础_集合框架
- 黑马程序员_Java基础——集合框架(下)(第4篇)
- java基础-- 集合框架入门 及 List集合
- Java基础之集合框架
- Java基础之集合框架(三)--Map、HashMap、TreeMap
- 黑马程序员--Java基础之集合框架(2)
- java基础之集合框架
- 黑马程序员_Java基础_集合框架成员Map
- 黑马程序员--集合框架知识总结和泛型--java学习日记7(基础知识)
- JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)