1つの プライベート クラス Itrが実装イテレータ<E> {が 2 INTカーソル; // 呼び出されたメソッドの戻り次のインデックス要素 。3 INT lastRet = -1; // 最近のコール次のメソッドが戻るの要素の指数(無次のメソッド呼び出しを介しが存在しない場合この値は)-1に等しい 4。 INT expectedModCount = ModCount; 5 。6 Itrが(){} 7。 8。 / * 9 *即ち位置にカーソルの要素は、イテレータ要素の次の反復は、また、取得したか否か、存在するか否かが判断されます。 10 * / 11 パブリック ブールのhasNext(){ 12は、 リターンカーソル=!サイズ; 13です } 14 15 / * 16 要素の位置に*戻りカーソル、及びカーソルを移動させます。 17 * / 18である ( "未チェック" @SuppressWarnings ) 。19 公共Eは、次の(){ 20は checkForComodification(); 21れる // 1、次のhasNextの決意メソッドの呼び出しの前にメソッドを呼び出す必要がある-例外回避 22は INT I = カーソル、 23は、 IF(I> = サイズ) 24 投 新しい新はNoSuchElementException(); 25 。オブジェクト[]ののArrayListからelementData = この.elementDataを、 26である IF(I> = elementData.length) 27 投 新しい新しいConcurrentModificationExceptionが(); 28 // 2、カーソルを移動させるが、後の値を返す 29 カーソル= I + 1。; 30 // 3、この変数の記録位置lastRest復帰要素セット 31は、 リターン(E)のからelementData 【lastRet = I]; 32 } 33が 34である 公共 ボイド削除(){ 35 IF(lastRet <0 ) 36 投 新しい新しいIllegalStateExceptionを(); 37 checkForComodification(); 38である 39 トライ{ 40 //2、それはここから見ることができ、次の要素法へのリターンコールを除去するRemoveメソッドです。 41で のArrayList。この.remove(lastRet); 42である カーソル= lastRet; 43である // 3は、方法を削除して、次の方法が密接に関連して、ここから見ることができます。 44 // のみremoveメソッドの呼び出しに連絡することができない、removeメソッドを呼び出すために、次のメソッドを呼び出して、 45 //は、次のメソッドremoveメソッドの下の最初の呼び出し前に呼び出さなければなりません。 46は lastRet = -1 ; 47 expectedModCount = ModCount; 48 } キャッチ(例外:IndexOutOfBoundsException EX){ 49 投 新しい新A ConcurrentModificationExceptionが(); 50 } 51 } 52 53 @Override 54 @SuppressWarnings( "未チェック" ) 55 公共 ボイド forEachRemaining(消費<?スーパー E> 消費者){ 56 Objects.requireNonNull(消費者)。 57 最終 int型のサイズ=のArrayList。この.size; 58 int型私は= カーソルを。 59 もし(I> = サイズ){ 60 リターン。 61 } 62 ファイナルオブジェクト[]からelementData =のArrayList。この.elementData; 63 もし(I> = elementData.length){ 64 投 新しいConcurrentModificationExceptionが()。 65 } 66 ながら(I =サイズ&& modCount ==!expectedModCount){ 67 consumer.accept((E)からelementData [I ++ ])。 68 } 69 // ヒープ書き込みトラフィック低減する反復の終わりに一度更新 70 カーソル= I。 71 lastRet = I - 1 。 72 checkForComodification(); 73 } 74 75 最終 ボイドcheckForComodification(){ 76 であれば(modCount =!expectedModCount) 77 投 新しいConcurrentModificationExceptionが()。 78 } 79 }