ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
4 種類の繰り返し構文
// 1. for ループ (回数指定)
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
// 2. while ループ (条件指定)
int n = 0;
while (n < 10) {
System.out.println(n);
n++;
}
// 3. do-while ループ (最低 1 回実行)
int m = 0;
do {
System.out.println(m);
m++;
} while (m < 10);
// 4. 拡張 for-each (コレクション走査)
int[] arr = {10, 20, 30};
for (int v : arr) {
System.out.println(v);
}
使い分けの目安
| 用途 | 推奨構文 | 理由 |
|---|---|---|
| 0 〜 N-1 回繰り返し | for (int i = 0; i < N; i++) | 定型で読みやすい |
| 配列・List 全走査 | 拡張 for / Stream | 添字管理不要、ミス減 |
| 条件が満たされる間 | while | 条件が主役のとき自然 |
| 最低 1 回は実行したい | do-while | 入力検証ループ等 |
| Map のキー / 値走査 | 拡張 for + entrySet() | キー値同時取得が安全 |
| 並列処理 / 集約 | Stream API | 宣言的、並列化容易 |
for ループの細部
// 標準
for (int i = 0; i < 10; i++) { ... }
// 逆順
for (int i = 9; i >= 0; i--) { ... }
// 2 ずつ
for (int i = 0; i < 100; i += 2) { ... }
// 複数変数
for (int i = 0, j = 100; i < j; i++, j--) { ... }
// 無限ループ
for (;;) {
if (condition) break;
}
// インデックス + 値 (List)
List<String> list = List.of("a", "b", "c");
for (int i = 0; i < list.size(); i++) {
System.out.println(i + ": " + list.get(i));
}
拡張 for-each (★ 推奨)
// 配列
String[] names = {"Taro", "Hanako", "Jiro"};
for (String name : names) {
System.out.println(name);
}
// List
List<Integer> nums = List.of(1, 2, 3);
for (int n : nums) { // ★ Integer から int への自動 unboxing
System.out.println(n);
}
// Map (entrySet が定番)
Map<String, Integer> map = Map.of("a", 1, "b", 2);
for (Map.Entry<String, Integer> e : map.entrySet()) {
System.out.println(e.getKey() + " = " + e.getValue());
}
// キーだけ / 値だけ
for (String k : map.keySet()) { ... }
for (Integer v : map.values()) { ... }
拡張 for の制約:
- インデックスを取れない (必要なら for ループへ)
- 要素の追加・削除ができない (要
Iteratorまたは別途リスト) - 要素の差し替えはできない (基本型では参照のコピーになる)
break / continue
// break: ループを完全に脱出
for (int i = 0; i < 100; i++) {
if (i == 10) break;
System.out.println(i);
}
// → 0..9 を出力
// continue: 次のイテレーションへスキップ
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) continue;
System.out.println(i); // 奇数だけ
}
// ラベル付き break / continue (多重ループ脱出)
outer:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i * j > 6) {
break outer; // 外側のループも抜ける
}
System.out.println(i + "," + j);
}
}
Iterator パターン (要素削除)
List<Integer> list = new ArrayList<>(List.of(1, 2, 3, 4, 5));
// ❌ 拡張 for 内で削除 → ConcurrentModificationException
for (Integer n : list) {
if (n % 2 == 0) list.remove(n); // ★ NG
}
// ✅ Iterator で削除
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
int n = it.next();
if (n % 2 == 0) it.remove();
}
// ✅ Java 8+ removeIf (一番簡潔)
list.removeIf(n -> n % 2 == 0);
Stream API での代替 (Java 8+)
List<Integer> nums = List.of(1, 2, 3, 4, 5);
// 各要素に処理
nums.forEach(n -> System.out.println(n));
nums.forEach(System.out::println); // メソッド参照
// 変換 + フィルタ + 集約
int sumOfSquaresOfEven = nums.stream()
.filter(n -> n % 2 == 0)
.mapToInt(n -> n * n)
.sum(); // 4 + 16 = 20
// インデックス付きで処理 (IntStream)
String[] arr = {"a", "b", "c"};
IntStream.range(0, arr.length)
.forEach(i -> System.out.println(i + ": " + arr[i]));
// 並列処理 (要素間で副作用が無い場合のみ)
nums.parallelStream().forEach(System.out::println);
ループのパフォーマンス Tips
- サイズ取得をループ外に:
int n = list.size(); for (int i = 0; i < n; i++) - 配列より
ArrayListは微妙に遅い。クリティカルな計算ループは配列で - LinkedList の
get(i)は O(n)。インデックスループでは ArrayList を使う - 文字列連結は StringBuilder。
String+= は毎回新規 String 生成 - Stream の
forEachは for より若干遅い。ホットループでは for を選ぶ
無限ループのパターン
// イベント駆動
while (true) {
Event e = queue.poll();
if (e == null) {
Thread.sleep(100);
continue;
}
if (e.isStop()) break;
process(e);
}
// 再試行
int retry = 0;
while (true) {
try {
return api.call();
} catch (IOException ex) {
if (++retry >= 3) throw ex;
Thread.sleep(1000 * retry);
}
}
FAQ
Q: do-while の用途は?
A: 最低 1 回は実行したいループ。ユーザー入力検証 (「正しい入力が来るまで聞く」) や再試行ループに自然です。
Q: 拡張 for と Stream forEach どちらを使うべき?
A: 単純な走査は拡張 for で十分。filter / map / reduce 等で集約するなら Stream。並列化したいなら parallelStream。
Q: ループの中で配列を変更してもよい?
A: for (int v : arr) 内で arr[i] 書き換えは可だが、List の構造変更 (add/remove) は ConcurrentModificationException。Iterator か removeIf を使う。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?