how to 編寫乙個Iterator

2022-03-11 02:53:15 字數 1343 閱讀 4981

首先,考慮編寫iterator,我們需要基於哪幾個方面的考慮:

由於迭代器會訪問list的私有域,因此,可以有2種方式:

一種的改變list的域的可見性,讓其變成public或friendly(預設的可見性,即包可見性)的,不過這違反了良好的物件導向程式設計的羈絆原則,它要求資料盡可能的隱蔽。

另外一種是為list新增乙個內部類或者巢狀類,然後我們來看這2種類的區別。

首先我們需要先理解一下2種類的概念:

將乙個類放入另乙個類的內部,當這個類是static的,表示巢狀類,否則這個類就是內部類。

1,巢狀類

巢狀類是外部類的一部分,所以可以訪問外部類,特性:

巢狀類訪問外部類:

不能直接訪問外部類的非靜態成員 

只能直接訪問外部類的靜態成員  

外部類訪問巢狀類:

外部類可以訪問巢狀類的私有成員 和

公有成員

so this is **實現:

private

static

class myiterator

public

boolean

hasnext()

public

t next()

public

void

remvoe()

}

2,內部類

當宣告乙個內部類時,編譯器會新增對外部類的乙個隱式引用,該物件引起內部類物件的構造。

如果外部類的名字是outer,則隱式引用就是outer.this。

實現:

private

class myiterator

public

boolean

hasnext()

public

t next()

public

void

remvoe()

}

然後我們再考慮以下方面:

巢狀類的問題在於,在我們的原始設計中,當編寫

arrays而不引用而不引用所在的

mylist物件時,**看起來還行,也似乎有意義,但確實無效的,因為編譯器不可能計算出哪個

mylist在被引用,要是我們自己能夠不必知道這點就好了,而內部類恰好是我們需要的。

在每乙個內部類的物件恰好與外部類的乙個例項相關聯的請情況下,內部類是有用的。

在這種情況下,內部類的物件在沒有外部類物件與其關聯時事永遠不可能純在的,對於迭代器的情形,這種情況剛好適用。

用內部類實現的**更加簡潔有效。

考慮了這些以後,所以實現乙個迭代器的最佳方案就是用內部類。

(ps:網上經常有人把內部類和巢狀類的概念搞錯了,我在這裡更正一下。)

How to 解決乙個問題,找乙個庫,評價乙個庫

一步一步回答完下列的問題,我相信你的答案就呼之欲出了 準備 1.定義要解決的這個問題 2.網上怎麼分解這個問題,同行怎麼分解這個問題 檢索 1.問題複雜度,專案工期,專案成員的能力,可以把握的資源 2.開源專案 朋友使用推薦 同行解決方案 需求 1.使用規模和限制 使用時間 2.對源 需要新增外部庫...

編寫乙個makefile

什麼是makefile?對於大多數的windows程式設計師來講,makefile可能不是那麼重要,因為windows的ide都為程式設計師做好了這個工作。但是在linux下程式設計,會不會寫makefile,從側面上說明乙個人是否具備完成大型工程的能力。makefile的作用 makefile是用...

編寫乙個webpack loader

loader是一種打包的方案,webpack預設只識別js結尾的檔案,當遇到其他格式的檔案後,webpack並不知道如何去處理。此時,我們可以定義一種規則,告訴webpack當他遇到某種格式的檔案後,去求助於相應的loader。新建loaders資料夾並建立三個loaders檔案 remove co...