JAVA学习之Itertator迭代器和增强for循环

本文详细介绍了Java中集合的迭代方式,包括Iterator接口的使用及其原理,以及增强for循环的实现机制和使用场景。通过代码示例,展示了如何使用这两种方法遍历集合和数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Iterator接口

1、集合有很多种,存储的数据类型不同,那么取出的方式也不同,但是有了迭代器就可以都取出来

2、迭代:即Collection集合元素的通用获取方式。在取元素之前要判断集合中有没有元素,如果有,那就取出来,继续再判断。如果还有就再取出来,一直把集合中的所有元素全部取出。这种取出方式叫做迭代

3、java.util.Iterator接口:迭代器(对集合进行遍历)

有两个常用的方法:

boolean hasNext():如果仍有元素可以迭代,则返回true;判断集合中还有没有下一个元素,有就返回true,没有就返回false;

E next();返回迭代的下一个元素,也就是取出下一个元素

4、Iterator迭代接口中的方法hasNext器是一个接口,无法直接使用,需要使用Iterator的实现类对象,获取实现类的方式比较特殊。 Collection接口中有一个方法叫做Iterator(),这个方法返回的就是迭代器的实现类对象。

5、迭代器的使用步骤:

1、使用集合中的方法Iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)

注意:Iterator<E>接口是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型

2、使用Iterator接口中的方法hasNext判断还有没有下一个元素

3、使用Iterator接口中的方法next取出

二、迭代器的代码实现

package com.company;


import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * ClassName:DemoIterator
 * Package:java
 * Description:
 *
 * @Date:2020/2/20 19:23
 * @Author:nana
 */
public class Main {
    public static void main(String[] args) {
//        首先就创建一个集合,并添加元素
        Collection<String > coll =new ArrayList<>();
        coll.add("spring");
        coll.add("summer");
        coll.add("fall");
        coll.add("winter");
/*
1、使用集合中的方法Iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
注意:Iterator<E>接口是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型
2、使用Iterator接口中的方法hasNext判断还有没有下一个元素
3、使用Iterator接口中的方法next取出
*/
        Iterator<String> a=coll.iterator();
        /*
        由于不知道集合中具体有多少元素,所以不方便使用for循环
        这里利用while循环来输出
        * */
        while(a.hasNext()){
            System.out.println(a.next());
        }

    }
}

三、迭代器的实现原理

获取迭代器的实现类对象,并且会把指针指向集合的索引。hasnext判断集合中还有没有下一个元素,next做两件事情:1、取出下一个元素2、会把指针向后移动一位。

四、增强for循环

1、增强for循环(也成for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的,它的内部原理其实是个Iterator迭代器,所以在遍历过程中,不能对集合中的元素进行增删操作。

2、增强for循环:底层使用的也是迭代器,使用for循环的格式,简化了迭代器的书写。

所有的单列集合都可以使用增强for循环

增强for循环就是用来遍历集合和数组

3、格式

for(集合或者是数组的数组类型 变量名:集合名/数组名){

sout(变量名)

}

4、代码演示

package com.company;

import java.util.ArrayList;

/**
 * ClassName:Foreach
 * Package:com.company
 * Description:
 *
 * @Date:2020/2/20 20:00
 * @Author:nana
 */
public class Foreach {
    public static void main(String[] args) {
        demo1();
        demo2();
    }
//使用增强for循环遍历数组
    private static void demo2() {
        int[] arr={1,2,3,4};
        for(int i:arr){
            System.out.println(i);
        }
    }

    //使用增强for循环遍历集合
    private static void demo1() {
        ArrayList<String> list=new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        for(String s:list){
            System.out.println(s);
        }
    }
}

### C++ 迭代器简介 迭代器在 C++ 中用于遍历容器中的元素。通过使用模板类泛型编程,迭代器提供了一种统一的方式来访问不同类型的序列化数据结构。 #### 输入迭代器特性 输入迭代器是最基本的一种迭代器类别,支持单向读取操作。对于给定的两个输入迭代器 `first` `last`,可以表示一个范围 `[first, last)`[^1]。 ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {10, 20, 30}; auto it = vec.begin(); // 获取指向第一个元素的输入迭代器 while (it != vec.end()) { std::cout << *it << " "; ++it; } } ``` 此代码展示了如何创建并使用输入迭代器来遍历整个向量的内容。注意这里使用的前置自增运算符 (`++it`) 是为了提高效率。 #### 构造函数解析 当涉及到特定构造函数时,如下面所示: ```cpp template <class _InputIterator> vector(_InputIterator first, typename enable_if<__is_input_iterator<_InputIterator>::value && !__is_forward_iterator<_InputIterator>::value && /* other conditions */...>::type last); ``` 这段代码片段表明该构造函数接受一对输入迭代器作为参数,并利用 SFINAE(Substitution Failure Is Not An Error)机制确保只有满足条件的情况下才会实例化这个版本的构造函数。 #### 实际应用案例 考虑这样一个场景:有一个整数列表存储在一个文件里,现在希望将其加载到内存中形成一个动态数组。此时就可以借助于输入迭代器配合标准库算法完成这项工作。 ```cpp #include <fstream> #include <iterator> #include <vector> std::ifstream infile("data.txt"); std::istream_iterator<int> start(infile), end; // 使用输入迭代器初始化 vector 容器 std::vector<int> numbers(start, end); for(auto num : numbers){ std::cout<<num<<" "; } ``` 上述例子说明了如何从流对象构建输入迭代器,并以此为基础快速填充 STL 容器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值