迭代器和增强for

Posted maplesu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器和增强for相关的知识,希望对你有一定的参考价值。

增强for

内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

格式:

for(元素的数据类型  变量 : Collection集合or数组){

}

它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。

 * foreach:增强for循环,一般用于遍历集合或者数组

 * 格式:

 * for(元素的类型 变量 : 集合或者数组对象) {

 * 可以直接使用变量;

 * }

注意:在增强for循环中不能修改集合,否则会出现并发修改异常。

foreach比迭代器遍历集合的优势在于代码更加的简洁,更不容易出错,不用关心下标的起始值和终止值。

 

迭代器

1. Iterator专门用于对集合进行遍历使用的

 * 2. 哪些集合可以使用迭代器进行遍历?

 *      Collection: 可以

 *      List: 可以

 *      Set: 可以

 *      Map: 不可以*  Map-->Set

 

//使用迭代器遍历ArrayList集合
    Iterator<String> listIt = list.iterator();
21         while(listIt.hasNext()){
22             System.out.println(listIt.hasNext());
23         }
24         //使用迭代器遍历Set集合
25         Iterator<String> setIt = set.iterator();
26         while(setIt.hasNext()){
27             System.out.println(listIt.hasNext());
28         }
29         //使用迭代器遍历LinkedList集合
30         Iterator<String> linkIt = linkList.iterator();
31         while(linkIt.hasNext()){
32             System.out.println(listIt.hasNext());
33         }
void remove();//移除元素 }

1. Iterator专门用于对集合进行遍历使用的

 * 2. 哪些集合可以使用迭代器进行遍历?

 *      Collection: 可以

 *      List: 可以

 *      Set: 可以

 *      Map: 不可以*  Map-->Set

 * 3. Iterator , 是一个接口, 调用itertator()可以得到该接口类型的对象

 *   在集合定义中, 有实现了Iterator接口的内部类的集合, 可以使用迭代器

 *   实现了Iterable接口的集合可以使用迭代器进行遍历

 *   

 * 4. Iterator: 接口, 迭代器, 用于对集合(Collection)进行遍历

 *    Iterable: 接口, 有一个抽象方法叫iterator(), 返回结果是一个Iterator对象(前提是在集合中定义了内部类, 该类实现了Iterator接口)

 *    iterator(): 源头是Iterable接口, 返回一个迭代器对象

 *    

 * 5. foreach, 增强for循环, jdk1.5之后可以使用

 *      foreach循环底层使用了迭代器的方式

 *      

 * 6. foreach和迭代器Iterator的区别

 *      foreach可以遍历数组, 迭代器不能遍历数组;

 *      

 * 7. 迭代器中的方法

 *   hasNext(): 用于判断迭代器中是否还有下一个元素, 有返回true, 没有返回false

 *   next(): 用于获取下一个元素

 *   remove(): 删除元素

 *      前提是必须先调用next方法, 而且remove方法只能在next方法后被调用一次, 否则, 抛出异常: IllegalStateException

 *   统一个迭代器只能被使用一次, 使用一次之后, 指针已经指向末尾了, 再调用hasNext方法时, 返回false

 



以上是关于迭代器和增强for的主要内容,如果未能解决你的问题,请参考以下文章

java基础第十二篇之集合增强for循环迭代器和泛型

如何在自定义类中隐藏迭代器和容器实现(无增强)

为啥我可以在 Python for 循环中对迭代器和序列使用相同的名称?

迭代器和生成器

Python迭代器和生成器

迭代器和for循环工作机制