首先,考慮編寫iterator,我們需要基於哪幾個方面的考慮:
由於迭代器會訪問List的私有域,因此,可以有2種方式:
一種的改變List的域的可見性,讓其變成public或friendly(預設的可見性,即包可見性)的,不過這違反了良好的面向物件程式設計的羈絆原則,它要求資料儘可能的隱蔽。
另外一種是為List新增一個內部類或者巢狀類,然後我們來看這2種類的區別。
首先我們需要先理解一下2種類的概念:
將一個類放入另一個類的內部,當這個類是static的,表示巢狀類,否則這個類就是內部類。
1,巢狀類
巢狀類是外部類的一部分,所以可以訪問外部類,特性:
巢狀類訪問外部類:
不能直接訪問外部類的非靜態成員
只能直接訪問外部類的靜態成員
外部類訪問巢狀類:
外部類可以訪問巢狀類的私有成員 和公有成員
so this is 程式碼實現:
複製程式碼
private static class MyIterator<T>{
MyList<T> list ;
int iteratorIndex = 0;
public MyIterator(MyList<T> myList){
list = myList;
}
public boolean hasNext(){
return list.length>iteratorIndex;
public T next(){
return list.arrays[iteratorIndex++];
public void remvoe(){
list.remove(iteratorIndex--);
2,內部類
當宣告一個內部類時,編譯器會新增對外部類的一個隱式引用,該物件引起內部類物件的構造。
如果外部類的名字是Outer,則隱式引用就是Outer.this。
實現:
private class MyIterator<T>{
首先,考慮編寫iterator,我們需要基於哪幾個方面的考慮:
由於迭代器會訪問List的私有域,因此,可以有2種方式:
一種的改變List的域的可見性,讓其變成public或friendly(預設的可見性,即包可見性)的,不過這違反了良好的面向物件程式設計的羈絆原則,它要求資料儘可能的隱蔽。
另外一種是為List新增一個內部類或者巢狀類,然後我們來看這2種類的區別。
首先我們需要先理解一下2種類的概念:
將一個類放入另一個類的內部,當這個類是static的,表示巢狀類,否則這個類就是內部類。
1,巢狀類
巢狀類是外部類的一部分,所以可以訪問外部類,特性:
巢狀類訪問外部類:
不能直接訪問外部類的非靜態成員
只能直接訪問外部類的靜態成員
外部類訪問巢狀類:
外部類可以訪問巢狀類的私有成員 和公有成員
so this is 程式碼實現:
複製程式碼
private static class MyIterator<T>{
MyList<T> list ;
int iteratorIndex = 0;
public MyIterator(MyList<T> myList){
list = myList;
}
public boolean hasNext(){
return list.length>iteratorIndex;
}
public T next(){
return list.arrays[iteratorIndex++];
}
public void remvoe(){
list.remove(iteratorIndex--);
}
}
複製程式碼
2,內部類
當宣告一個內部類時,編譯器會新增對外部類的一個隱式引用,該物件引起內部類物件的構造。
如果外部類的名字是Outer,則隱式引用就是Outer.this。
實現:
複製程式碼
private class MyIterator<T>{
int iteratorIndex = 0;