簡體   English   中英

列表與列表迭代器

[英]List vs List iterator

我有一個清單:

List<Object> myList = new ArrayList<Object>();

要從此列表中獲取,有兩種方法:

1。

for(Object obj : myList )
{
    // some code
}

2。

Iterator<Object> objIt = myList.iterator();
while(obj.hasNext()) {
    Object obj = (Object)objIt.next();
    // some code
}

我的問題是哪一個是內存效率和快速迭代?

他們做同樣的事情 - 增強的for循環只是簡寫版本的語法糖(對於iterables;對於數組,它略有不同)。 除非你明確需要迭代器(例如調用remove() ),否則我會使用第一個版本。

有關編譯器執行的確切轉換的更多詳細信息,請參閱Java語言規范的第14.14.2節

使用Iterator可以從定義class外部更安全地訪問List ,因為您不會意外地覆蓋整個List 您一次只能訪問一個元素:頂部元素。

因此,我們使用的指南是僅在定義類中使用for each方法,並且每當需要從外部訪問List時,必須使用迭代器。 這也強制了保持如何修改包含它的class中的成員的邏輯的概念。 外部需要的所有復雜操作必須在class內的public方法中實現。

第一個是你所謂的“增強for循環”,它是在JDK 1.5+中引入的

迭代列表是更方便的方法。 此外,如果您使用它,則無需進行顯式鑄件。

從表現的角度來看,我認為兩者之間並沒有太大的區別。

迭代器:它在需要時為您提供結果,並且不會在內存中獲得所有結果

增強的for循環僅在其中使用迭代器。 所以兩者都是一樣的。

第一個更清楚,但如果你想在訪問列表時刪除元素,你唯一的選擇是迭代器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM