為什麼有了foreach還要有迭代器?

2021-09-26 23:03:32 字數 402 閱讀 8952

foreach就是基於迭代器實現的

foreach需要知道自己的集合型別,甚至要知道自己集合內的元素型別,不能實現多型。這個使用的語法上都可以表示出來。foreach可以遍歷任何集合或者陣列,但是使用者需要知道遍歷元素的型別。

iterator是乙個介面累心,它不關心集合的累心和集合內的元素型別,因為它是通過hasnext和next來進行下乙個元素的判斷和獲取,這一切都是在集合型別定義的時候就完成的事情。迭代器統一了對容器的訪問模式,這也是對介面解耦的最好表現。

iterator它可以隨之修改元素內部的元素。可以在遍歷的時刻用remove()刪除元素 而foreach不可以。

foreac較為簡便,foreach略帶麻煩但是功能強大,如果都是遍歷陣列的話兩者功能其實都一樣,不停的執行下乙個元素直至結束。只不過實現起來略有差異

有了網段為什麼還要有VLAN???

近幾日,在學習vlan及vxlan方面的知識,對於產生原因做乙個總結及詳解。vlan virtual local area network,虛擬區域網 其主要用途是用來縮小廣播域,即進行隔離。先對廣播域的乙個概念做如下描繪 如下圖,主機a b c d均連線在交換機sw1上,其中a c同網段為192....

為什麼有了binlog還要有redo log

binlog會記錄所有與mysql資料庫有關的日誌記錄,包括innodb,myisam,heap等其他儲存引起的日誌。而redo log只記錄innodb引擎本身的日誌。binlog記錄的是關於乙個事務的具體操作內容,即該日誌是邏輯日誌。而redolog記錄的是關於每個頁的更改的物理情況。寫入時間不...

有了VARCHAR,為什麼還要有CHAR?

varchar varchar往往用來儲存可變長度的字串。簡單的說,我們只是給其固定了乙個最大值,然後系統會根據實際儲存的資料量來分配合適的儲存空間。為此相比char字元資料而言,其能夠比固定長度型別占用更少的儲存空間。因為其長度是可變的,為此在資料進行更新時可能會導致一些額外的工作。如在更改前,其...