インプリメンテーション
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--;
}
}
}