zoukankan      html  css  js  c++  java
  • Iterator<转>

    Iterator就是迭代器的意思。

    Iterator是一个接口,利用迭代器主要是获取元素,很少删除元素。有三个方法:
        1)hasNext():判断是否有更多的元素,如果有返回true。
        2)next():在hasNest()的判断下,如果有更多的元素,就返回下一个元素。
        3)Remove() 删除所返回的上一个元素。(可选操作)至少要返回一次才能删除元素。也就是说如果上一个元素都没有,那么怎么能删除呢?那不是要出现异常了吗? 
    具体操作:
        1)定义一个Iterator类型的变量it,在集合框架当中Collection提供了一个方法iterator(),可以返回一个迭代器。只要是间接继承或者直接继承Collection的都有这个方法。所以可以用ArrayList的一个对象al去返回一个迭代器。

    使用Iterator获得元素:

    代码
    
    import java.util.Arrays;
    import java.util.Iterator;
    import java.util.List;
    
    public class ArrayListTest {
        public static void main(String[] args) {
            ArrayList al = new ArrayList();
            al.add(new Point(1, 2));
            al.add(new Point(5, 2));
    
            Iterator it = al.iterator();
            while (it.hasNext()) {// 判断是否有更多的元素, 
                System.out.println(it.next());// 那么就循环打出。
            }
        }
    }

    使用Iterator删除元素:

    由于Iterator开始的时候是指向第一个元素之前的,因此如果你要删除第一个元素,那么就要让它将指针向下移动一下

    public class ArrayListTest {
        public static void main(String[] args) {
            ArrayList al = new ArrayList();
            al.add(new Point(1, 2));
            al.add(new Point(5, 2));
    
            Iterator it = al.iterator();
            it.next(); // 先要获得元素。由于第一次用,那么就是得到的第一个元素。
            it.remove();// 然后才能删除所获得的元素。
            while (it.hasNext()) {
                System.out.println(it.next());
            }
        }
    }

    Array.asList(Object[] obj)将一个对象数组转换成一个列表返回,返回一个固定尺寸的列表,不能向列表当中增加或减少元素。列表当中的元素列表返回的迭代器不支持remove()方法,因为remove方法就是减少了元素,改变了列表的固定尺寸。

    迭代器的作用:我们观察到不使用迭代器也可以获得列表当中的元素,那为什么还要用呢? 因为有的集合类(比如Set)没有提供get()操作,那么这时迭代器就可以发生作用了。更重要的作用是它提供了一种通用的方式去访问集合中的元素。 
    Collection 提供了一个方法Iterator<E> iterator()
    返回在此 collection 的元素上进行迭代的迭代器。凡是继承自Collection或者Collection间接的实现类都有这样的一个方法。

    【一个通用的遍历元素方法:】

    public static void printElement(Collection c) {
        /*
         * 参数类型是Collection,那么只要是它的派生类或者间接实现类的对象都可以
         * 作为参数传递进来,作为编写程序的人员来说就不需要针对某一种特定类型的集合
         * 类而编写一个迭代,再打印,这样很麻烦。要用迭代器的时候直接调用这个
         * 方法就ok。
         */
        Iterator i = c.iterator();
        while (i.hasNext()) {
            System.out.println(i.next());
        }
    }

    使用迭代器遍历和删除集合中的元素:

    package com.collection;
    
    import java.util.Collection;
    import java.util.Iterator;
    
    public class IteratorTest {
        /**
         * 打印集合中的元素
         * 
         * @param c
         */
        public static void printElements(Collection<?> c) {
    
            // 定义一个Iterator类型的变量it
            // Iterator java.util.Collection.iterator()返回一个集合的迭代器
            Iterator<?> it = c.iterator();
    
            // boolean java.util.Iterator.hasNext() 
            // Returns true if the iteration has more elements
            while (it.hasNext()) {
                // Returns the next element in the iteration.
                System.out.println(it.next());
            }
        }
    
        /**
         * 删除一个元素。
         * 
         * @param c
         */
        public static void deleteElements(Collection<?> c) {
            
            Iterator<?> it = c.iterator();
            
            // 删除元素之前应该首先调用next()方法。
            it.next();
            
            // void java.util.Iterator.remove()
            // 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
            it.remove();
        }
    }

    转至Meng72

    http://www.cnblogs.com/meng72ndsc/archive/2010/12/22/1914201.html

  • 相关阅读:
    JS防止刷新,后退,关闭
    IIS日志-网站运维的好帮手
    未能加载文件或程序集“XXX”或它的某一个依赖项。磁盘空间不足---解决方案
    NOPI导出标准格式Excel
    DRBD+Heartbeat+Mysql高可用环境部署
    LVS三种包转发模型调度算法
    nagios环境部署(rhel6.5)
    关于nagios监控
    关于memcached原理及安装部署
    PHP5.4.36 RHEL6.5 源码编译安装
  • 原文地址:https://www.cnblogs.com/xuerong/p/4978009.html
Copyright © 2011-2022 走看看