Javaのソースコード解析イテレータ

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      }

 

おすすめ

転載: www.cnblogs.com/KenBaiCaiDeMiao/p/12003380.html