2012-03-13 112 views
0

我有兩個列表a = {1,2,2,5,6,6,6,7}b = {2,3,3,6,6,6,8} 我希望得到同等的要素,在這種情況下,輸出應爲2 *(2 = 2),9 *(6 = 6)這裏是我的代碼部分如何在Java中將一個迭代器的內容傳遞給另一個迭代器?

Iterator aIt = a.iterator(); 
    Iterator bIt = b.iterator(); 
    Iterator tempIt = b.iterator(); 

    int aNode = (Integer)aIt.next(); 
    int bNode = (Integer)bIt.next(); 
    Boolean isEquals = false; 

    while(aIt.hasNext()||bIt.hasNext()){ 
     while(aNode<bNode){ 
      aNode = (Integer)aIt.next(); 
     } 
     while(aNode>bNode){ 
      bNode = (Integer)bIt.next(); 
     } 
     while(aNode==bNode){ 
      tempIt = bIt; 
      while(aNode==bNode){ 
       System.out.println(aNode + " = " + bNode); 
       bNode = (Integer)tempIt.next(); 
      } 
      aNode = (Integer)aIt.next(); 
      tempIt = bIt; 
      bNode = (Integer)tempIt.next(); 
      isEquals = true; 
     } 
     if(isEquals){ 
      bIt = tempIt; 
      isEquals = false; 
     } 
    } 

但是,在我運行代碼後,我意識到我所傳遞的是bIttempIt而不是內容的引用。有沒有解決方案,如果我真的想用迭代器來實現呢?非常感謝!

+0

不知道我明白你如何從a,b到'(1,0)(2,0)(4,3)(4,4)(4,5)(5,3)' - 什麼數據操縱你想做什麼? – assylias 2012-03-13 18:23:41

+0

@assylias這些是索引。仔細讀。 – Juvanis 2012-03-13 18:24:17

+0

你能解釋一下,那麼,驅逐出境者,因爲我不清楚,要麼? – 2012-03-13 18:25:29

回答

2

這聽起來像你想克隆你的迭代器,這是在Java中不支持的東西(clone()方法是私有的)。 就像一個註釋,迭代器不包含數據,你應該把它看作是一個列表的接口。所以也許迭代器不是這裏最理想的解決方案。

+0

+1。記住自己的指數,問題就解決了。 – 2012-03-13 18:41:33

-1

我懷疑有一個更簡單的方法來做到這一點---即不使用迭代器,而是通過使用列表本身。

因此,如果您的列表A和B是ArrayList<Integer> S,它可能是這個樣子:

public void printMatch(ArrayList<Integer> A, ArrayList<Integer> B) { 
    for(int i = 0; i < A.length(); i++) { 
     for(int j = 0; j < B.length(); j++) { 
      if(A.get(i).equals(B.get(j))) { 
       System.out.println("Match!" + A.get(i)); 
      } 
     } 
    } 
} 

或沿這些行的東西---我沒有編譯的,但它是個好主意。

+1

wtf?這只是檢測是否有任何值出現在兩個列表中。這不是被問到的問題(在第一個也沒有修改過的問題)。 – 2012-03-14 03:41:57