2016-09-23 173 views
1

我是一名java開發人員,我知道遊標的概念是c,C++中指針的替換。爲什麼要用遊標來代替java集合中的循環

但我不明白遊標是如何在後臺工作的。

要獲得陣列 值,我們使用的是

for(i=0;i<array.length;i++) 
{ 
System.out.println(array[i]); 
} 

,但如果我們去光標集合

 Iterator itr = array.iterator(); 
     while(itr.hasNext()) { 
    Object element = itr.next(); 
    System.out.print(element + " "); 
    } 

爲什麼我們沒有去for循環打印的元素,而不是遊標?

+0

好吧,你可以用'foreach loop'或'for loop'來做。 – SomeJavaGuy

+0

'i ++'方法對於一些集合來說尤其糟糕,比如沒有O(n^2)perf的鏈接列表。或者在迭代開始時不知道它們大小的懶惰Iterables。 – yshavit

+0

我能夠做的功能,如設置,添加,刪除使用for循環和遊標。我的問題是爲什麼在Java遊標優於循環。 Java有什麼樣的背景讓遊標保存列表的引用 –

回答

1

for (Object obj : array) { 
    System.out.print(obj + " "); 
} 

有這取決於你想要做什麼不同的用途。 Foreach不能更新元素,但迭代器可以。

0

您也可以使用for循環,但是如果您正在使用for循環並更改列表中的元素,程序將引發ConcurrentModificationException。在這種情況下,光標將工作。

+0

我閱讀了Oracle文檔中的ConcurrentModificationException文檔。它顯示了這個例外可能不會悄悄拋出。如果一個線程在迭代另一個集合迭代器(fail-fast iterator)時直接修改集合,它將拋出異常。 –

1

那麼,如果你只是想顯示那個對象的值,那麼你可以去那個數組循環,但是如果你想修改那個對象,比如給某個對象設置一個新值,那麼你最好去光標,因爲你可以修改對象,如果涉及到數據庫也很有用

+0

我可以理解你的觀點,他我們在數據庫中使用光標獲取數據。目前我可以使用for循環和遊標來設置,添加和刪除集合(ArrayList,LinkedList)。我的問題是爲什麼在Java遊標優於循環。 Java有什麼樣的背景讓遊標保存列表的引用 –

0
ArrayList<String> array = new ArrayList<String>(); 
     array.add("a"); 
     array.add("b"); 
     array.add("c"); 
     array.add("d"); 
     array.add("e"); 
     for (int i = 0; i < array.size(); i++) { 
      System.out.println(array.get(i)); 
     }