1. [3,1,4,1,5] のとき 5 (典型ケース)
  2. [100] のとき 100 (要素 1 個)
  3. [] のとき -1 (空配列ガード)
  4. [-5,-10,-1] のとき -1 (全要素マイナス)
  5. [7,7,7,7] のとき 7 (全要素同じ)
  6. [1,2,3,4,5] のとき 5 (既にソート済み)
コース一覧
Java 中級:コレクション・Stream・例外処理
Collections クラスの便利メソッド

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分

Collections クラスの便利メソッド

並べ替えを自分で書くと、境界を 1 つ間違える

リストを昇順にしたいだけなのに、交換用の一時変数と二重ループを書き、添字の範囲を 1 つ間違えて悩む。誰もが一度は通る道ですが、java.util.Collections を使えばこの手の処理は 1 行で終わります。

Java

import java.util.ArrayList; import java.util.Collections; import java.util.List; List<String> names = new ArrayList<>(); names.add("sato"); names.add("abe"); names.add("kudo");

この names に対して、並べ替えと最大値の取得を呼んでみます。

Java

Collections.sort(names); System.out.println(names); // [abe, kudo, sato] System.out.println(Collections.max(names)); // sato

Collections.sort はその型の標準的な順番、つまり数値なら小さい順、文字列なら辞書順に並べ替えます。Collections.max はその順番でいちばん後ろにあたる要素を返します。Integer String LocalDate のように比べ方が決まっている型なら、そのまま渡すだけです。

解説

Collections (s 付き) と Collection (s 無し) は別物です。前者は便利メソッドを集めた道具箱、後者は List や Set の親インタフェースです。

sort は新しいリストを返さない

Collections.sort の戻り値は void です。

Java

List<String> sorted = Collections.sort(names); // コンパイルエラー

並べ替えは、元のリストをその場で書き換える形で行われます。呼んだあとの names がもう並んでいるので、受け取る変数は要りません。並べ替えた結果が返ってくると思い込んでいると、この 1 行で止まります。

配列のままでは渡せない

Collections のメソッドは List を受け取ります。Collections.sort(arr) のように int[] を渡してもコンパイルは通りません。ジェネリクスにプリミティブ型は入れられないので、List<int> という型そのものが存在しないからです。

そのため int[] を扱うときは、まず List<Integer> を用意して中身を 1 つずつ移し替えます。移し終われば、上の例と同じように sort も max も呼べます。

もう 1 つ気をつけたいのが、空のリストに Collections.max を呼ぶと NoSuchElementException で落ちることです。最大値は要素が 1 つ以上あることが前提なので、空かどうかを先に確かめてから呼びます。課題でも、空の配列が渡されたときの戻り値が別に決められています。順番としては、まず空の場合を片付け、それから詰め替えに進むと迷いません。

要件

  1. クラス名は Solution、メソッド名は sortAndMax、引数は int[] arr ひとつにすること
  2. 戻り値の型は int で、int[] を List<Integer> に変換してから Collections.sort と Collections.max を使って最大値を返すこと
  3. 配列が空 (arr.length == 0) のときは -1 を返すこと (Collections.max を空リストに呼ぶと例外になるため必ずガードする)

入出力例

sortAndMax([3,1,4,1,5]) → 5 sortAndMax([100]) → 100 sortAndMax([]) → -1 sortAndMax([-5,-10,-1]) → -1 sortAndMax([7,7,7,7]) → 7 sortAndMax([1,2,3,4,5]) → 5

ヒント

まず `if (arr.length == 0) return -1;` でガードします。これがないと空リストを `Collections.max` に渡したときに `NoSuchElementException` が飛びます

`int[]` から `List<Integer>` への変換は `for (int v : arr) list.add(v);` が素直で安全です。`Arrays.asList(arr)` だと `List<int[]>` (要素 1 個のリスト) になってしまうので使わないでください

`Collections.sort(list)` の戻り値は `void` です。`list = Collections.sort(list);` ではなく、`Collections.sort(list);` と書いて、その後の `list` をそのまま使います

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

関連レッスン

  • コレクション基礎 まとめクイズ

    コレクション基礎 (List / Map / Set / Collections) の総まとめ。使い分けと内部の仕組みを 4 択クイズで確認する。

  • ジェネリッククラスを作る

    型パラメータ `<T>` を使って、任意の型を受け取れるジェネリッククラス `Box<T>` を自分で定義し、文字列を包んで取り出すコードを書いてみよう。

  • try-catch で例外をつかむ

    Java の例外処理の基本となる try-catch 構文を学び、NumberFormatException を捕まえてデフォルト値を返すコードを書いてみよう。

  • Stream を作る

    Java の Stream API を学ぶ最初のステップとして、配列やコレクションから Stream を生成し、count などのターミナル操作で要素数を取得するコードを書いてみよう。

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

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

  • リスト順序付きで複数の値を扱うデータ構造
  • 変数データに名前をつけて参照する仕組み
  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • 処理計算や代入を表す長方形
  • メソッドクラスに属する関数
  • 戻り値呼び出し元への返答を表す点線矢印
  • 配列サイズ固定の同型データの集まり
  • コンパイルソースをバイトコードへ変換する処理
main.java
学習モード
エディタを読み込んでいます

メモ

Collections クラスの便利メソッド

⌘S で保存