コース一覧
    Java入門:配列とコレクション
    要素の削除と検索

    Java入門:配列とコレクション

    配列とコレクションの扱いを学び、複数のデータを安全に整理・検索・集計できるようにします。

    1
    配列
    01. 配列の基本5分
    02. 配列の要素にアクセス5分
    03. 配列を for で走査5分
    04. Javaで配列の合計・平均を求める方法(forループ)5分
    05. 配列の平均5分
    06. 配列の最大値5分
    07. 配列の線形探索12分
    08. 拡張 for ループ5分
    09. 配列クイズ5分
    10. 第 6 章 まとめクイズ5分
    2
    コレクション基礎
    01. ArrayList を使う5分
    02. List を走査する5分
    03. 要素の削除と検索5分
    04. HashMap の基本5分
    05. Map を走査する5分
    06. Set で重複を排除5分
    07. Collections クラスの便利メソッド5分
    08. コレクション基礎 まとめクイズ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 にすること

    ヒント

    `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 で保存