1. banana を remove した後の size と contains を連結
コース一覧
Java 中級:コレクション・Stream・例外処理
要素の削除と検索

Java 中級:コレクション・Stream・例外処理

コレクション、ジェネリクス、例外処理、Stream API、関数型インターフェース、日付処理、ファイル I/O、継承など Java の中級トピックを実践的に学べるコースです。Java の基礎文法とオブジェクト指向を理解している学習者を対象に、現場の Java コードを読み書きするための知識を補強します。約 16 時間 (1 日 30 分 × 32 日) で 64 レッスンを修了でき、修了後は Spring Boot や業務システム開発に必要な Java 力が身につきます。

1
コレクション基礎
01. ArrayList を使う5分
02. List を走査する5分
03. 要素の削除と検索5分
04. HashMap の基本5分
05. Map を走査する5分
06. Set で重複を排除5分
07. Collections クラスの便利メソッド5分
08. コレクション基礎 まとめクイズ5分
2
ジェネリクス
01. ジェネリッククラスを作る5分
02. ジェネリックメソッド5分
03. 境界型パラメータ5分
04. ワイルドカード ?5分
05. Pair<K,V> を作る5分
06. ジェネリクス まとめクイズ5分
3
例外処理
01. try-catch で例外をつかむ5分
02. 複数の catch ブロック5分
03. throws と例外の伝播5分
04. 独自の例外を作る5分
05. try-with-resources5分
06. finally ブロック5分
07. 例外処理 まとめクイズ5分
4
Stream API
01. Stream を作る5分
02. filter で絞り込む5分
03. map で変換する5分
04. reduce で集約する5分
05. collect で集める5分
06. sorted で並び替え5分
07. distinct で重複排除5分
08. limit と skip5分
09. 並列ストリーム5分
10. Stream API まとめクイズ5分
5
関数型インターフェース
01. ラムダ式の基本5分
02. メソッド参照 ::5分
03. Function インターフェース5分
04. Predicate インターフェース5分
05. Consumer と Supplier5分
06. BiFunction と 2 引数の関数5分
07. 関数型インターフェース まとめクイズ5分
6
文字列操作
01. String.format で書式化5分
02. StringBuilder で連結5分
03. 正規表現の基本5分
04. split と join5分
05. 文字列操作 まとめクイズ5分
7
日付と時刻
01. LocalDate で日付を扱う5分
02. LocalDateTime で時刻も扱う5分
03. Duration で時間差を計算5分
04. 日付の書式化とパース5分
05. 日付の加減算5分
06. 日付と時刻 まとめクイズ5分
8
ファイル I/O
01. Files でファイルに書き込む5分
02. ファイルを行単位で読む5分
03. Path でファイルパスを扱う5分
04. BufferedReader と Stream API5分
05. ファイルの存在確認と削除5分
06. ファイル I/O まとめクイズ5分
9
継承とポリモーフィズム
01. extends で継承する5分
02. super で親を呼ぶ5分
03. メソッドのオーバーライド5分
04. abstract で抽象クラス5分
05. interface で契約を定義5分
06. default メソッド5分
07. instanceof と型パターン5分
08. ポリモーフィズムを活かす5分
09. 継承とポリモーフィズム まとめクイズ5分

要素の削除と検索

1 を消したはずが、2 が消えた

remove には、見た目のよく似た 2 つの顔があります。

Java

ArrayList<Integer> ids = new ArrayList<>(); ids.add(1); ids.add(2); ids.add(3); ids.remove(1); // [1, 3] ─ 消えたのは 1 番目の 2 ids.remove(Integer.valueOf(1)); // [3] ─ こちらは値の 1 が消える

Java には remove(int index) と remove(Object o) の 2 つが用意されていて、渡した引数の型で自動的に振り分けられます。int のリテラルを渡すと必ず番号扱いになるので、値を消したいときは Integer.valueOf(1) のように包んで型をずらします。

ArrayList<String> なら list.remove("sato") は文字列そのものを渡しているので、迷わず値の削除になります。番号と値が同じ見た目になるのは、要素が整数のときだけの問題です。削除すると後ろの要素が 1 つずつ前に詰まり、size() もその場で減ります。

消す前に、入っているかを聞く

Java

ArrayList<String> members = new ArrayList<>(); members.add("sato"); members.add("suzuki"); boolean hasSato = members.contains("sato"); // true int where = members.indexOf("suzuki"); // 1 int none = members.indexOf("tanaka"); // -1

contains は == ではなく各要素の equals で比べます。文字列なら中身が同じなら true です。何番目かまで知りたいときは indexOf を使い、見つからないときは -1 が返ります。if (where >= 0) で見つかった場合を判定する書き方に慣れておくと安全です。

要素数は size()、空かどうかは isEmpty() で分かります。size() > 0 より !isEmpty() のほうが意図が伝わる、というのはレビューでよく言われる話です。

走査しながら消すと、1 つ飛ばされる

条件に合うものを消したくなって、拡張 for の中で remove を呼ぶと事故になります。

Java

for (String name : members) { if (name.startsWith("s")) { members.remove(name); // ConcurrentModificationException } }

拡張 for は「今どこを見ているか」を内部で数えながら進みます。その途中で要素が減ると位置がずれて次の要素を飛ばしてしまうため、Java は異常に気づいた時点で例外を投げて止めます。運悪く例外が出ないまま、消し漏れだけが残ることもあります。

走査しながら消したいときは、Iterator を自分で取り出して remove を呼びます。

Java

Iterator<String> it = members.iterator(); while (it.hasNext()) { String name = it.next(); if (name.startsWith("s")) { it.remove(); // 位置がずれない } }

Iterator 側から消せば、内部の位置も一緒に調整されるので飛ばされません。import java.util.Iterator; を忘れないでください。

課題で消すのは 1 件だけなので、ループは要りません。削除したあとの要素数と、残っているかどうかの判定を組み合わせて文字列を作ります。

要件

  1. クラス名は Solution、メソッド名は summarize、戻り値の型は String、引数なしで定義すること
  2. ArrayList<String> を作って "apple" "banana" "cherry" をこの順に add してから、"banana" を remove すること
  3. 戻り値は size= + list.size() + ,hasApple= + list.contains("apple") の形で連結した String にすること

入出力例

summarize() → "size=2,hasApple=true"

ヒント

`ArrayList` を使うときは `import java.util.ArrayList;` を忘れないでください

`remove("banana")` のように `String` を渡すと `remove(Object)` が呼ばれ、値で削除されます。インデックスではないので注意

`String` に `int` や `boolean` を `+` で連結すると、自動で文字列化されて `"size=2,hasApple=true"` のような形になります

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • HashMap の基本

    Java の `HashMap` を使って、キーと値のペアを保存し、商品名から価格を引き出すメソッドを作ろう。

  • Map を走査する

    Map をキーと値のペアでループする方法を学ぼう。entrySet / keySet / values の使い分けと、順序を保証する LinkedHashMap の使い方まで身につける。

  • Set で重複を排除

    Java の Set を使って、コレクションから重複した要素を取り除く方法を学びます。HashSet と LinkedHashSet と TreeSet の違い、Set ならではの API を整理しよう。

  • Collections クラスの便利メソッド

    java.util.Collections の sort / max / min / reverse / shuffle を使いこなして、List を自由自在に操作しよう。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 引数位置引数=順番で渡す。
  • 素数1 と自分自身でしか割り切れない自然数
  • レビューコードを読み合い品質を上げる工程
  • ビュークエリに名前をつけて再利用する仮想表
  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • クラスデータと振る舞いを束ねる単位
  • メソッドクラスに属する関数
  • 戻り値呼び出し元への返答を表す点線矢印
main.java
学習モード
エディタを読み込んでいます

メモ

要素の削除と検索

⌘S で保存