精华内容
下载资源
问答
  • Iterator迭代器

    2020-09-15 17:59:00
    黑马程序员 Iterator迭代器 Iterator接口 迭代器原理

    黑马程序员

    Iterator迭代器

    Iterator接口

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    迭代器原理

    在这里插入图片描述

    展开全文
  • iterator迭代器

    2017-11-08 23:17:59
    iterator 迭代器 iterator  An iterator over a collection是一个集合的迭代器 常用的几个方法 public interface Iterator { E next(); boolean hasNext(); void remove(); } 同过反复的调用next...

    iterator 迭代器

    iterator 

    • An iterator over a collection是一个集合的迭代器

    常用的几个方法
    public interface Iterator<E>
    {
    E next();
    boolean  hasNext();
    void   remove();
    
    }

    同过反复的调用next()方法来不断的获取集合的每个元素 ,当到达集合的末尾的时候会抛出一个NoSuchElementException的异常
    因此需要在调用next()方法调用hasNext。如果有迭代器对象有多个元素就返回true 
    Collection<String>  c  =......;
    Iterator it = c.iterator();
    while(it.hasNext())
    {
    String element = it.next();
    do  something with element
    }

    用“for each”循环更加简单
    for(String element:c)
    {
    do  something with elements 
    }
    for each循环可以与任何实现了iterator 接口的对象一起工作
    该接口只有一个抽象方法
    Iterator<E>  iterator();

    Collection 接口扩展了Iterator接口  因此对于标准类库中的任何集合都可以使用for  each 循环



    展开全文
  • C++ Iterator迭代器介绍 迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下:迭代器 描述...  C++...
     C++ Iterator迭代器介绍 迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下:迭代器 描述...

       C++ Iterator迭代器介绍

        迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下:

    迭代器 描述 

    input_iterator 提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。

    output_iterator 提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。

    forward_iterator 可向前移动的,同时具有读写功能的迭代器。同时具有input和output迭代器的功能,并可对迭代器的值进行储存。

    bidirectional_iterator 双向迭代器,同时提供读写功能,同forward迭代器,但可用来进行增加(++)或减少(--)操作。

    random_iterator 随机迭代器,提供随机读写功能.是功能最强大的迭代器, 具有双向迭代器的全部功能,同时实现指针般的算术与比较运算。

    reverse_iterator  如同随机迭代器或双向迭代器,但其移动是反向的。(Either a random iterator or a bidirectional iterator that moves in reverse direction.)

        vector容器类就有一个random-access随机迭代器,这也意味着其可以使用随机读写的算法。既然随机迭代器具有全部其它迭代器的特性,这也就是说为其它迭代器设计的算法也可被用在vector容器上。


       C++ Iterator迭代器操作举例

     (www.169it.com)

    (1) 每种容器类型都定义了自己的迭代器类型,如vector:

    1
    vector<int>::iterator iter; //这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型。

    (2) 使用迭代器读取vector中的每一个元素:

    1
    2
    3
    4
    5
    6
    vector<int> ivec(10,1);
    for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
    {
    *iter=2; //使用 * 访问迭代器所指向的元素
    }
    const_iterator:

    只能读取容器中的元素,而不能修改。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(vector<int>::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)
    {
    cout<<*citer;
    //*citer=3; error
    }
    vector<int>::const_iterator 和 const vector<int>::iterator的区别
    const vector<int>::iterator newiter=ivec.begin();
    *newiter=11; //可以修改指向容器的元素
    //newiter++; //迭代器本身不能被修改

    (3) iterator的算术操作:

    iterator除了进行++,--操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.

    1
    2
    3
    const vector<int>::iterator newiter=ivec.begin();
    vector<int>::iterator newiter2=ivec.end();
    cout<<"\n"<<newiter2-newiter;

     一个很典型使用vector的STL代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <vector>
     #include <iostream> 
     using namespace std; 
     int main() 
    {
     vector<int> ivec;
     ivec.push_back(1);
     ivec.push_back(2);
     ivec.push_back(3);
     ivec.push_back(4); 
     for(vector<int>::iterator iter = ivec.begin();1. iter != ivec.end(); ++iter)
     cout << *iter << endl;
     }

    如下代码对vector容器对象生成和使用了迭代器:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    vector<int> the_vector;
      vector<int>::iterator the_iterator;
      forint i=0; i < 10; i++ )
        the_vector.push_back(i);
      int total = 0;
      the_iterator = the_vector.begin();
      while( the_iterator != the_vector.end() ) {
        total += *the_iterator;
        the_iterator++;
      }
      cout << "Total=" << total << endl;

    提示:通过对一个迭代器的解引用操作(*),可以访问到容器所包含的元素。


    展开全文
  • 文章目录1、Iterator迭代器2、开发中推荐使用方式3、错误使用方式4、Iterator迭代器中remove()方法5、利用迭代器实现的增强for循环遍历或者说foreach遍历 1、Iterator迭代器 用来遍历Colletioon接口实现的集合,返回...

    1、iterator迭代器

    用来遍历Colletion接口实现的集合,返回iterator接口的实例。

    (1)iterator迭代器:专门用来遍历List、Set接口实现的集合,它不是一个容器,是Colletion接口中的一个遍历集合的方法,相当于火车上的乘务员的检票过程;当然也可以用于遍历HashMap,因为map中的Entry里面有一个个的Key,这个Key是Set(唯一不重复的,而Set可以用iterator遍历),所以可以通过Key得到Value,这就实现了HashMap的遍历了。

    (2)迭代器模式:提供一种方法访问一个容器(container)对象中各个元素,而不需要暴露该对象的内部细节。迭代器模式,可以说是专门为集合而生;

    (3)集合对象每次调用iterator()方法都得到一个全新的的迭代器对象,默认游标都在集合的第一元素之前,下面有图示;

    (4)内部有三个常见方法

    ①hasNext() :判断当前集合里还有没有元素可有进行遍历;
    next() : 用来遍历打印集合中的元素;
    remove() : 可以在遍历到指定的元素时进行移除指定的元素,要注意的是在调用remove()时,一定要先调用next()方法,先让指针(游标)下移到元素上。(图中coll是集合对象)
    在这里插入图片描述

    2、开发中推荐使用方式

           Iterator iterator = coll.iterator();//coll为集合对象
           while(iterator.hasNext()) {
           // next():①指针下移;②将下移以后集合位置上的元素返回。
           System.out.println (iterator.next());
           }
    

    3、错误的使用方式

    (1)错误方式一,没有调用hasNext()

    输出方式为:打印一个元素后跳一个元素不打印,再去打印下一个,就是去移动指针了,但没有去打印。并会报java.util.NoSunchElementException

          Iterator iterator= coll.iterator();//coll为集合对象
          while((iterator.next()) != null) {
          System.out.println (iterator.next());
          }
    

    (2)错误方式二,没有在while外去创建iterator对象

    输出方式为:会循环输出集合中第一个元素,死循环,原因是每次都会去创建一个新的iterator对象,而iterator的游标初始还是在第一个元素之前,next就是第一个元素,就打印第一个元素。

        while(coll.iterator().hasNext()) {
        System.out.println (iterator.next());
        }
    

    4、iterator迭代器中remove()方法

        Iterator iterator = coll.iterator();  //coll是一个集合对象
        while(iterator.hasNext()) {
            object obj = iterator.next(); //先调用next()方法
            if ("hello".equals(obj)) {
                iterator.remove(); //再调用remove()方法
              }
        }
    

    5、利用迭代器实现的增强for循环遍历或者说foreach遍历

    (1)作用 :增强for循环是用来遍历数组(包括一维数组和二位数组)、集合。

    (2)格式:

        for (数组或集合元素类型 局部变量名 :数组或集合对象名) {
              ... //代码
        }
    

    3)、注意点:
    这种遍历方式是在底层重新创建了一个数组或者集合,遍历过程中不会对原数组或者集合进行修改数据

    4)、代码演示:

    import java.util.ArrayList;
    public class Test1 {
        public static void main(String[] args) {
            int[][] arr = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}};
            for (int[] arr1 : arr) {  //foreach遍历二位数组
                for (int i : arr1) {
                    System.out.print(i + " ");  //不换行打印元素
                }
                System.out.println();
            }
    
            System.out.println("---------");
    
            ArrayList<Integer> list = new ArrayList<>();
            list.add(1);
            list.add(2);
            list.add(3);
            list.add(4);
            for (Integer integer : list) {  //foreach遍历集合
                System.out.print(integer + " ");  //不换行输出
            }
        }
    }
    

    打印结果:

    1 2 3 
    1 2 3 
    1 2 3 
    ---------
    1 2 3 4 
    

    6、面试题

    其中关于迭代器的有一个笔试题:大概就是考察,使用迭代器会不会去改变当前集合本身的元素?

    答案:迭代器不会去对当前集合去做任何的修改操作,于是是不会改变集合本身元素,那么怎么理解remove()方法的删除呢?
    其实删除相当于是跳过当前要删除的元素,而不去打印它罢了。

    有用点个关注,手留余香! 😗 😗 😗

    展开全文
  • 这个是利用iterator迭代器来对hashMap进行迭代元素,数据java基础的内容。有兴趣的朋友可以看看。
  • // let iter = arr1[Symbol.iterator]() // console.log(iter.next()); // console.log(iter.next()); // console.log(iter.next()); // console.log(iter.next()); // console.log(iter.next()); // console.log...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,066
精华内容 9,226
关键字:

iterator迭代器