Iterator<转>

Iterator就是迭代器的意思。html

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

使用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开始的时候是指向第一个元素以前的,所以若是你要删除第一个元素,那么就要让它将指针向下移动一下spa

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间接的实现类都有这样的一个方法。code

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

 

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();
    }
}

 

转至Meng72blog

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

相关文章
相关标签/搜索