多重ループ
日本語 | 多重輪 |
英語 | multi loop |
ふりがな | たじゅうるーぷ |
フリガナ | タジュウループ |
ループの中にループが入っているループ。
for、while、do-whileによるループの中に、ループを入れる事ができる。ループの中にループを入れることで、2重3重のループを作ることができる。これが「多重ループ」である。
多次元配列を扱う場合等に使用する。
安易な多重ループはネストが深くなり、コードが長くなる傾向にあるため、可読性が落ちる。ループそれぞれをメソッドで分けた方がいいだろう。
このようにメソッドでループを分けた場合には「多重ループ」と呼ばないことが多い。つまり「多重ループ」というのは単に「プログラムの見た目の話」を指す場合が多いということである。
見た目的に多重ループであろうと、メソッドに分けてあろうと、多重ループは処理が指数的に増えるため、処理速度に非常に大きな影響を与える可能性がある。
多重ループしている箇所がある場合、必ずパフォーマンスを調べ、ボトルネックとなっていないことを確認した方が良いだろう。
for、while、do-whileによるループの中に、ループを入れる事ができる。ループの中にループを入れることで、2重3重のループを作ることができる。これが「多重ループ」である。
多次元配列を扱う場合等に使用する。
安易な多重ループはネストが深くなり、コードが長くなる傾向にあるため、可読性が落ちる。ループそれぞれをメソッドで分けた方がいいだろう。
このようにメソッドでループを分けた場合には「多重ループ」と呼ばないことが多い。つまり「多重ループ」というのは単に「プログラムの見た目の話」を指す場合が多いということである。
見た目的に多重ループであろうと、メソッドに分けてあろうと、多重ループは処理が指数的に増えるため、処理速度に非常に大きな影響を与える可能性がある。
多重ループしている箇所がある場合、必ずパフォーマンスを調べ、ボトルネックとなっていないことを確認した方が良いだろう。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
for( int iF1 = 0; iF1 < 3; ++iF1 )
{
// ループ1重目、ここから。
int i = 0;
while( i < 3 )
{
// ループ2重目、ここから。
++i;
// ループメソッドを呼びます。
loop();
// この中でループをしています。
// ということは、「この箇所」では3重ループしていることになります。
// ただの言葉遊びという感じですが。
// ただし、このように3重ループしている箇所を見つけたら、
// パフォーマンスのチェックはするようにしましょう。
// 3乗というのは決して馬鹿にできませんし、
// 特にWebアプリケーションは「秒単位の処理が求められる」ことを
// 忘れてはいけません。
// ループ2重目、ここまで。
}
// ループ1重目、ここまで。
}
// このように、基本的にループの種類に関係なく、
// ループの多重度は決まります。
// 単純に「ネストの深さ」=「ループの深さ」と考えましょう。
}
/**
* ループするメソッド。
*/
private static void loop()
{
for( int iF1 = 0; iF1 < 3; ++iF1 )
{
// ループ3重目……にはなりません。
// だって、このメソッドを上記の箇所から呼び出しているとは
// 限らないし。
}
}
}
public class Sample
{
public static void main( String[] args )
{
for( int iF1 = 0; iF1 < 3; ++iF1 )
{
// ループ1重目、ここから。
int i = 0;
while( i < 3 )
{
// ループ2重目、ここから。
++i;
// ループメソッドを呼びます。
loop();
// この中でループをしています。
// ということは、「この箇所」では3重ループしていることになります。
// ただの言葉遊びという感じですが。
// ただし、このように3重ループしている箇所を見つけたら、
// パフォーマンスのチェックはするようにしましょう。
// 3乗というのは決して馬鹿にできませんし、
// 特にWebアプリケーションは「秒単位の処理が求められる」ことを
// 忘れてはいけません。
// ループ2重目、ここまで。
}
// ループ1重目、ここまで。
}
// このように、基本的にループの種類に関係なく、
// ループの多重度は決まります。
// 単純に「ネストの深さ」=「ループの深さ」と考えましょう。
}
/**
* ループするメソッド。
*/
private static void loop()
{
for( int iF1 = 0; iF1 < 3; ++iF1 )
{
// ループ3重目……にはなりません。
// だって、このメソッドを上記の箇所から呼び出しているとは
// 限らないし。
}
}
}
// Sample.java public class Sample { public static void main( String[] args ) { for( int iF1 = 0; iF1 < 3; ++iF1 ) { // ループ1重目、ここから。 int i = 0; while( i < 3 ) { // ループ2重目、ここから。 ++i; // ループメソッドを呼びます。 loop(); // この中でループをしています。 // ということは、「この箇所」では3重ループしていることになります。 // ただの言葉遊びという感じですが。 // ただし、このように3重ループしている箇所を見つけたら、 // パフォーマンスのチェックはするようにしましょう。 // 3乗というのは決して馬鹿にできませんし、 // 特にWebアプリケーションは「秒単位の処理が求められる」ことを // 忘れてはいけません。 // ループ2重目、ここまで。 } // ループ1重目、ここまで。 } // このように、基本的にループの種類に関係なく、 // ループの多重度は決まります。 // 単純に「ネストの深さ」=「ループの深さ」と考えましょう。 } /** * ループするメソッド。 */ private static void loop() { for( int iF1 = 0; iF1 < 3; ++iF1 ) { // ループ3重目……にはなりません。 // だって、このメソッドを上記の箇所から呼び出しているとは // 限らないし。 } } }