web-dev-qa-db-ja.com

Javaでの 'for'の使用

私はJavaと、 for loops に関する別のStack Overflow質問にかなり新しいです。

for (int i = 0; i < N; i++) {
}


for (String a : anyIterable) {
}

私はforの最初の使用法を知っており、これを多く使用しましたが、2番目のものは見たことがありません。それは何をするために使用され、いつそれを使用しますか?

24
Josh Curren

指定する2つの最初のループは、古典的なC forループです。これにより、プログラマは反復条件を制御でき、3つの操作が可能になります。初期化。ループテスト。増分式。 yorの例のように、設定された試行回数だけ増分的に繰り返すために頻繁に使用されますが:

_for (int i=0; i < N : i++)
_

forを使用してコレクションを反復するコードには、さらに多くのインスタンスがあります。

_for (Iterator iter = myList.iterator(); iter.hasNext();)
_

2番目のタイプのボイラープレートを省略し(3番目の節は多くの場合使用されなかった)、2つの例の2番目であるJava 1.5で導入された Generics forループ、または _for-each loop_ -が導入されました。

2番目は、配列とGenericコレクションで使用されます。 このドキュメントを参照Iterator.next()の結果を既知の型にキャストすることなく、Collectionの型がわかっている汎用コレクションを反復処理できます。

比較する:

_for(Iterator iter = myList.iterator; iter.hasNext() ; ) {
   String myStr = (String) iter.next();
   //...do something with myStr
}
_

_for (String myStr : myList) {
   //...do something with myStr
 }
_

このループの「新しいスタイル」は、配列でも使用できます。

_String[] strArray= ...
for (String myStr : strArray) {
   //...do something with myStr
}
_
37
akf

「for in」ループの大部分は見た目がよく、コードが読みやすくなります。 (:を「in」と発音した場合)。

リストまたは配列を反復処理するときは常に、自分のコードで2番目のタイプをほぼ排他的に使用します。

ほとんどの数学的なコードを処理するとき、またはループした回数を確認するために「i」が必要なときは、通常のforループを使用します。

4
wm_eddie

配列全体またはIterableコレクション全体を反復処理するために使用されます。それは基本的に置き換えます:

for(int i=0; i<N.length; i++)

そして、かなりクールなジェネリックで使用することができます

1
Paul

それはfor eachループと呼ばれ、基本的には、それを実装するものなら何でも使用できます

Java.lang.Iterable

ジェネリックコレクションはこのインターフェイスを実装しますが、独自のクラスを作成することもできます。欠点は、従来のループのようにリスト内の現在の番号に明示的にアクセスできないということですが、リスト/コレクション内のすべてを非常に簡単に処理できます。イテレータクラスの呼び出しのため、従来のループよりもこのタイプのループに関連するオーバーヘッドがいくつかあります。

1
Chris Thompson

どちらも機能は同じですが、for(String a:anyIterable){}の方が読みやすく、入力が少なくて短くなります。 for(int i = 0; i <N:i ++)ループ制御変数によるコレクションのインデックス作成iおよびfor(String a:anyIterable){}はコレクションにインデックスを付けません

0
RoshanS