2017-05-11 15 views
1

例外をスローせずに配列リストを反復処理する正しい方法は何ですか?私はこれを試してみました:Javaの配列リストを正しく反復する

 while(packages.get(i)!=null) 
     { 
      if(packages.get(i).equals(z)) 
      { 
       packages.remove(i); 
       this.setNumPack(this.getNumPack()-1); 
      } 
      i++; 
     } 

インデックスがlist.Iも限りイテレータは、配列のサイズよりも小さかったが、それは助けをdidntのよう反復しようとした配列のサイズよりも大きい場合には、例外をスローします。ありがとう

答えて

2

反復と削除の方法はたくさんありますが、特定のコードでは、要素を削除するとインデックスがインクリメントされません(要素を削除すると、削除された要素の後ろにあるすべての要素のインデックスが減少します)。 ):ipackages.size()に達したときに当然のことpackages.get(i)

はまだそれほどループの方が良いだろう、例外をスローします:

for (int i = 0; i < packages.size(); i++) 
    { 
     if(packages.get(i).equals(z)) 
     { 
      packages.remove(i); 
      this.setNumPack(this.getNumPack()-1); 
      i--; 
     } 
    } 
1
 for (int i = 0; i < packages.size(); i++) { 
      if(packages.get(i).equals(z)) { 
       packages.remove(i); 
       this.setNumPack(this.getNumPack()-1); 
      } 
     } 
0

通常の方法:

for (int i = 0; i < list.size(); i++) 

'新しい' 方法:

for ('your type' item : list) 
0

リストがnull要素を持っている場合は、リストがnullであるかかどうかをチェックすることができます...これらは2 COMPLです。 ...

List<Integer> l = Arrays.asList(1, null, 3, 4, 5, null); 

    Iterator<Integer> it = l.iterator(); 

    while (it.hasNext()) { 
     Integer integer = (Integer) it.next(); 
     if (integer != null) { 
      System.out.println("the element is holding: " + integer); 
     } else { 
      System.out.println("the element is null"); 
     } 
    } 

や古典強化ループあなたがいずれかを使用することができます

List<Integer> l = Arrays.asList(1, 2, 3, 4, 5, null); 
    if (l != null) { 
     for (Integer integer : l) { 
      if (integer != null) { 
       System.out.println("the element is holding: " + integer); 

      } else { 
       System.out.println("the element is null"); 
      } 
     } 
    } else { 
     System.out.println("the list is null"); 
    } 
1

を異なるもの

イテレータがimplemetedすることができますが、明示的にnull値をチェックする必要がありますそのうちの1つ

//Loop Arraylist using foreach loop of JDK1.5 
       System.out.println("ArrayList Loop Example using foreach loop of JDK 1.5"); 
     for(String element: loopList){ 
      System.out.println(element); 
     } 




//Loop Arraylist using simple for loop and size method 
      System.out.println("ArrayList Loop Example using for loop and size()"); 
    for(int i=0; i<loopList.size(); i++){ 
     System.out.println(loopList.get(i)); 
    } 



//Iterate Arraylist using iterator and while loop in Java 
      System.out.println("ArrayList Loop Example using Iterator and while loop"); 
    Iterator<String> iterator = loopList.iterator(); 
    while(iterator.hasNext()){ 
     System.out.println(iterator.next()); 
    } 





//Iterate Arraylist using ListIterator and while loop in Java 
       System.out.println("ArrayList Loop Example using ListIterator and while loop"); 
     ListIterator<String> listIterator = loopList.listIterator(); 
     while(listIterator.hasNext()){ 
      System.out.println(listIterator.next()); 
     } 
0

また、あなたが道に沿って要素を削除することを計画している場合には、ArrayListに頭から尾まで反復することにより、遅かれ早かれ問題に実行するJava 8ストリームAPIに

List<Integer> list = Arrays.asList(1, 3, 4, 5); 
list.stream().forEach(System.out::println); 
0

を使用することができます。トリックは、リスト内で行われたすべての並べ替えが、削除されたインデックスからリストの最後まで行われるため、末尾から頭まで繰り返されます。削除される前のインデックスではありません。

擬似コード:

for(int i = list.size()-1; i >=0; i--){ 
    list.remove(i); 
} 
関連する問題