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

相關文章
相關標籤/搜索