2012-02-11 33 views
5

我想要做同樣的事情到 this修改Java的ArrayList的同時遍歷它

不過,我不希望添加的元素被遍歷。基本上我有一個潛在的數組列表,並且我返回一個迭代器來覆蓋數組列表。在使用該迭代器進行迭代時,我想將元素添加到原始數組列表中。我該怎麼做呢?

編輯:這個問題是我需要通過迭代代碼修改迭代器的對象。我不認爲克隆ArrayList中會工作...

EDIT2:這裏是我的代碼的精簡版本。

public class Map { 
    // a bunch of code 
    private ArrayList<Robot> robots; 

    public Iterator<Robot> getRobots() { 
      return robots.iterator(); 
    } 

    public void buildNewRobot(params) { 
      if(bunchOfConditions) 
       robots.add(new Robot(otherParams); 
    } 

    // a bunch more code 
} 

這裏是在另一個類中使用的地圖。

for(Iterator<Robot> it = map.iterator(); it.hasNext();){ 
    Robot r = it.next(); 
    // a bunch of stuff here 
    // some of this code modifies Robot r 

    if(condition) 
     map.buildNewRobot(params); 
} 
+1

如果您提供相關代碼 – ggreiner 2012-02-11 02:45:06

+0

添加的代碼將會很有幫助。對不起,省略它。 – BlackSheep 2012-02-11 22:20:41

回答

5

您可以創建列表副本並遍歷副本並將數據添加到舊副本。問題是你不會迭代新的itens。

+0

多做一些工作,但你可以繼續從真去僞,當沒有變化,F.E.變量而(變更)=>進行復制,設置變爲假,執行過程中,如果某樣東西添加或更改,將其更改爲true,否則該過程將結束, – Jonathan 2012-02-11 02:50:50

+0

這可能是清潔,處理的最安全方法迭代時一個數組列表的成員。我使用這種技術,並看到一致性 – Steer360 2013-03-15 11:59:40

0

可能HEP你。

ArraList<E> a = new ArrayList<E>(); 
Iteratore<E> i = a.iterator(); 
loop(check condition){ 
    if(satisfied){ 
     a.add(E e); 
    } 
}