インプリメンテーション

4840 ワード


昨日、同僚はいくつかのIteratorがどのようにhasNextがどのように余分な要素を知っているかを聞いたことがあります.ほほほ、ちょっとおかしいですね.実は普通です.私がcの構造体を学び始めたばかりの頃、1つのフィールドがlastで、私も疑問に思っていました.なぜlastは最後の要素を表しているのか、lastはキーワードなのか.
今日はjdkソースコードを見て、同僚に簡単な例を書きました.後で調べるためにコードを添付して、忘れないようにして、ほほほ.
 
public class Test {
    
    public static void main(String[] args) {
        MyList<String> list = new MyList<String>();
        list.setData("a");
        list.setData("b");
        list.setData("c");

        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
}

class MyList<E> implements Iterable<E>{
    
    private int size;
    private E data;
    private List<E> dataStore;
    
    public MyList(){
        size = 0;
        dataStore = new ArrayList<E>();
    }

    
    public int getSize() {
        return size;
    }


    public void setSize(int size) {
        this.size = size;
    }


    public E getData() {
        return data;
    }


    public void setData(E data) {
        this.data = data;
        this.size++;
        dataStore.add(data);
    }


    @Override
    public Iterator<E> iterator() {
        return new Itr();
    }


    private class Itr implements Iterator<E>{

        @Override
        public boolean hasNext() {
            return size>0?true:false;
        }

        @Override
        public E next() {
            return dataStore.get(--size);
        }

        @Override
        public void remove() {
            dataStore.remove(size);
            size--;
        }
    }
}