2017-11-12 7 views
2

arraylistの項目を置き換える際に問題があります。私は魂を探して、それがlistIteratorによって実行されていることを発見しました。だから私はそれを実装したいと思っていましたが、どういうわけかiteratorの "set"メソッドは利用できません。どうして?私の春のmvcアプリケーションでは、全体が@Repositoryで起こっています。ArrayListの項目をlistIteratorに置き換える - listIterator.set()を解決できません

private List<Car> listOfCars = new ArrayList<Car>(); 
listOfCars.add(...); 
listOfCars.add(...); 
listOfCars.add(...); 

public void update(Car car) { 
    Iterator<Car> listIterator = listOfCars.listIterator(); 
    while (listIterator.hasNext()) { 
     Car c = listIterator.next(); 

     if(c.equals(car)){ 
      listIterator.set(car); 
     } 

}

プログラムがlistIterator.set()を解決することはできません - これはNTO可能です。あなたがListIteratorの方法を使用するつもりなら

答えて

3

は、あなたのlistIterator変数のListIteratorタイプを使用します。

ListIterator<Car> listIterator = listOfCars.listIterator(); 

Iterator

setメソッドを持っていません。

+0

これは欠けていたものです。コンピュータの前で長時間過ごした後は、明白なことを見落とすのは簡単です。しかし、今私は 'ConcurrentModificationException'を取得します。私はイテレータを使ってこのような問題が発生するのを防ぐと思った。 – bartuomiei

+1

@bartuomieiなぜあなたはその例外を持っているのか分かりません。 ArrayListを変更するスレッドが複数ある可能性はありますか?とにかく、ループを 'int index = listOfCards.indexOf(car); if(index> = 0){listOfCars.set(index、car);}' – Eran

1

置き換えたい要素のインデックスがわかったらsetメソッドを使用できます。

listOfCars.set(INDEX, car); 
関連する問題