A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 青皮核桃 中级黑马   /  2015-6-23 22:31  /  945 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

迭代器是怎么遍历获取集合元素的呢

评分

参与人数 1黑马币 +10 收起 理由
rightyuan521 + 10 很给力!

查看全部评分

9 个回复

倒序浏览
这个  还在后面吧.记得  毕老师16天  有讲到..
回复 使用道具 举报
Iterator是一个迭代器接口,专门用来迭代各种Collection集合,包括Set集合和List集合。

    java要求各种集合都提供一个iteratot()方法,该方法返回一个Iterator用于遍历集合中的元素。至于返回的Iterator是哪一种实现类我们并不关心,这就是典型的“迭代器模式”。

    使用Iterator遍历集合元素,很好的隐藏了集合的内部细节。

    Iterator接口包含以下三个方法:

boolean hasNext():如果被迭代的集合元素还没有被遍历,则返回true。
Object next():返回集合里下一个元素
void remove():移除集合里上一次next()返回的元素
例子:

public class IteratorTest {
public static void main(String[] args) {
  Collection books  = new HashSet();
  books.add("计算机网络");
  books.add("数字信号处理");
  books.add("java语言程序设计");
  //生成迭代器
  Iterator it = books.iterator();
  int i=0;
  while(it.hasNext()){
   //next()返回的数据是Object型,需要强制转化
   String info = (String)it.next();
   //输出遍历的每一个元素
   System.out.println("第"+i+"个元素:"+info);
   if(info.equals("数字信号处理")){
    System.out.println(i);
    it.remove();  //把《数字信号处理》从集合books中移除
   }
   i++;   
  }
  //输出移除后的结果
  System.out.println(books);
}

}

回复 使用道具 举报
  1. //使用Iterator对象,迭代遍历
  2.                 Iterator<String> it=li.iterator();
  3.                 while(it.hasNext()){
  4.                 System.out.println("迭代输出:"+it.next());
  5.                 }
复制代码
回复 使用道具 举报
楼上很对~
回复 使用道具 举报
listIterator 目测是通过索引进行取数据遍历的   
而Iterator的工作原理到底是什么捏  没有索引 怎么知道集合中有多少数据,每个数据是什么
求解啊 功能原理
回复 使用道具 举报
1千克=1024克 发表于 2015-6-24 13:04
listIterator 目测是通过索引进行取数据遍历的   
而Iterator的工作原理到底是什么捏  没有索引 怎么知道集 ...

public class ArrayList implements List
{
        public Iterator iterator() {
        return new Itr();
    }
   
    private class Itr implements Iterator {
        public boolean hasNext() {
            return xxx;;
        }

        public E next() {
            return xxx;
        }
    }
}public interface Iterator
                        {
                                public abstract boolean hasNext();
                                public abstract Object next();
                        }

                        public interface Collection
                        {
                                public abstract Iterator iterator();
                        }

                        public interface List extends Collection
                        {
                                ...
                        }
                       
                        public class ArrayList implements List
                        {
                                public Iterator iterator()
                                {
                                        return new Itr();
                                }

                                private class Itr implements Iterator
                                {
                                        public boolean hasNext(){...}
                                        public Object next(){...}
                                }
                        }
由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同。
这个时候,我们就把判断和获取功能定义在了一个接口中,将来,遍历哪种
集合的时候,只要该集合内部实现这个接口即可
回复 使用道具 举报
贾森 中级黑马 2015-6-24 22:40:54
8#
1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  (2) 使用next()获得序列中的下一个元素。

  (3) 使用hasNext()检查序列中是否还有元素。
回复 使用道具 举报
刚学习了,有人回答的更详细了,顺便学习一下
回复 使用道具 举报
原理是 内部类实现的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马