2017-08-08 49 views
-1

我們可以使用Iterator和for循環打印鏈接列表。就內存分配而言,它有什麼不同?哪一個更有效?就內存而言,打印鏈接列表的有效方法

public class Demo { 
    public static void main(String[] args) { 
     LinkedList<String> placesToVisit = new LinkedList<String>(); 
     placesToVisit.add("Sydney"); 
     placesToVisit.add("Melbourne"); 
     placesToVisit.add("Brisbane"); 
     placesToVisit.add("Perth"); 

     printListWithoutFor(placesToVisit); 
     printListWithFor(placesToVisit); 

    } 

    private static void printListWithoutFor(LinkedList<String> linkedList) { 
     Iterator<String> i = linkedList.iterator(); 
     while (i.hasNext()) { 
      System.out.println("Now visiting " + i.next()); 
     } 
     System.out.println("========================="); 
    } 

    private static void printListWithFor(LinkedList<String> linkedList){ 
     for (int i=0; i<linkedList.size(); i++){ 
      System.out.println("Now visiting " + linkedList.get(i)); 
     } 
    } 
} 
+0

迭代器比循環更好。你可以在這裏找到更多的信息(https://stackoverflow.com/questions/22267919/iterator-vs-for) –

+0

完美。謝謝。 – jParmar

+0

迭代器比循環更好。你可能會發現更多的信息[這裏](https://stackoverflow.com/questions/22267919/iterator-vs-for) –

回答

1

印刷與Iterator更多的時間效率(因爲它遍歷鏈表只有一次,每個linkedList.get(i)需要在列表中的部分迭代),即使它需要更多一點的內存(爲的分配Iterator)。我不會爲Iterator選擇for循環來保存一個實例分配。

在空間複雜度方面,兩種方式都需要O(1)空間。

因此,您應該更喜歡具有更好時間複雜度的方法 - 使用Iterator的打印需要O(n)時間,而for循環需要O(n^2)時間。

0

只是不僅爲了內存的關注,而且爲了避免索引問題,你可以找到比循環更好的迭代器。請查看更多信息here