黑马程序员技术交流社区

标题: 集合和迭代器是什么样的关系? [打印本页]

作者: ℃葫芦    时间: 2015-8-13 09:00
标题: 集合和迭代器是什么样的关系?
  1. Collection co = new HashSet ();

  2.      co.add("aaa");
  3.      co.add("bcd");
  4.    
  5.      Iteratou it = co.iterator();
  6.      while(it.hasNext()) {
  7.              System.out.println(it.next);
  8.      }

复制代码


这段代码中   Iteratou it = co.iterator();这句话不理解为什么
作者: 李文思    时间: 2015-8-13 09:28
在集合中,我们要遍历获取元素,都要做两件事,判断有没有下一个元素,取出元素。
这两件事情,只有集合自己才最清楚要怎么做,所以根据面向对象的思想,就将具备了这些行为的事物定义成集合的内部类。
而集合中的这些内部类,都具备了相同的特性行为,所以将其抽取出来成为一个接口,这个接口就是跌代器。
集合中的iterator()方法就是获取该集合的跌代器。

注意:只有List与Set才具备跌代器,Map集合要遍历键值对,得先用keySet()获取键集合或者entrySet()获取键值对的集合。
作者: boboyuwu    时间: 2015-8-13 10:37
迭代器就是遍历的工具,遍历你懂吧,这句话就是将迭代器绑定你要遍历的集合,然后迭代器就可以访问集合中数据了
作者: 耀阳圣尊    时间: 2015-8-13 11:37
楼上二位正解
作者: ℃葫芦    时间: 2015-8-13 12:35
李文思 发表于 2015-8-13 09:28
在集合中,我们要遍历获取元素,都要做两件事,判断有没有下一个元素,取出元素。
这两件事情,只有集合自 ...

也就是说迭代器是集合中的内部类向上抽取出来的一个接口?
Iteratou it = co. iteratou ();这句话其实是一个多态
集合中的内部类是接口Iteratou的子类,所以
外部类不用去实现接口,内部类直接调用
那co.iteratou不用大写吗?
作者: zby_allan    时间: 2015-8-13 15:55
楼上正解,我再补充一点就是co.iterator()是指的set类的iterator方法,这个方法的返回值是一个该集合的迭代器,所以赋值给一个名为it的迭代器
作者: 君如玉    时间: 2015-8-13 16:12
学到新知识了
作者: 孟茹    时间: 2015-8-13 17:34
同意李文思
作者: 李文思    时间: 2015-8-15 12:57
℃葫芦 发表于 2015-8-13 12:35
也就是说迭代器是集合中的内部类向上抽取出来的一个接口?
Iteratou it = co. iteratou ();这句话其实是 ...

Iterator it = co.iterator()
这是一个多态,父类引用指向子类对象,
iterator(),这是集合的一个方法,首字母是不用大写的。你查下API
作者: 唯爱丶    时间: 2015-8-16 09:40
创建又给迭代器进行遍历Collection集合的!又由于Collection是单列集合的接口,所以下面的五类都可以用这个迭代器进行遍历,只是创建一个对象然后运用其中的方法而已!
作者: 樱花飘过    时间: 2015-8-16 10:12
集合石一个容器,集合有一个方法可以返回迭代器类型的子类对象,这个对象就又可以调用方法
作者: pengbeilin    时间: 2015-8-16 10:39
本帖最后由 pengbeilin 于 2015-8-16 10:48 编辑

万物皆对象

就是把遍历集合的几个方法封装成了一个接口 这个接口就是 Iteratou,也就是迭代器,它里面提供了3个方法。
Iteratou it = co.iterator();
集合怎么去获取一个迭代器的对象呢?这里是通过iterator()方法获得这个实例对象,方法里是怎么实习的呢?大概就是下面这个样子去实现的!
  1. public  Iterator<T> iterator()
  2. {
  3.         //内部类实现
  4.    Iterator<T> it = new Iterator(){
  5.         public boolean hasNext()
  6.         {
  7. 具体是什么内容我也不知道
  8.         }
  9.         public <T> next()
  10.         {
  11.         <span style="line-height: 30.7999992370605px;">具体是什么内容我也不知道</span>
  12.         }
  13.         public void remove()
  14.         {
  15.         <span style="line-height: 30.7999992370605px;">具体是什么内容我也不知道</span>
  16.         }
  17. };
  18.         return it;//返回一个Iteratou 也就是迭代器对象
  19. }
复制代码









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2