【Java学習|豆知識】Javaコレクション操作の便利術:Collectionsクラスでリストを自在に操る

導入

Javaでの開発中、リスト内のデータを並べ替えたり、回転させたりしたい場面は頻繁に訪れます。自前でアルゴリズムを実装するのはバグの温床になりがちですが、Java標準のCollectionsユーティリティクラスを使えば、わずか1行で安全かつ効率的にこれらの操作を実現できます。今回は、現場で特によく使うshuffle、reverse、rotateの3つのメソッドについて解説します。

基礎知識

Collectionsクラスは、java.utilパッケージに含まれる静的メソッドの集合体です。ここで重要なのは、これらのメソッドが「対象のリストを直接書き換える(破壊的変更)」という点です。
shuffle(): リストの要素をランダムに並べ替えます。テストデータの作成などに有効です。
reverse(): リストの要素を逆順にします。
rotate(): リストの要素を指定した距離だけ右に「回転」させます。末尾からはみ出した要素は先頭に移動します。

※注意点として、これらのメソッドはListインターフェースの実装クラス(ArrayListやLinkedListなど)を引数に取ります。SetやMapは順序を保証しない、あるいは順序の概念が異なるため、これらのメソッドを直接適用することはできません。

実装/解決策

これらのメソッドを利用するには、対象のリストを引数に渡すだけです。rotateの場合のみ、第2引数に移動させる距離(整数)を指定します。正の数は右方向、負の数は左方向への回転を意味します。

サンプルプログラム

以下のコードをコピーして、動作を確認してみてください。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CollectionUtilDemo {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(“A”);
list.add(“B”);
list.add(“C”);
list.add(“D”);

// 1. シャッフル: 要素をランダムに並び替える
Collections.shuffle(list);
System.out.println(“シャッフル後: ” + list);

// 2. リバース: 要素を逆順にする
Collections.reverse(list);
System.out.println(“逆順後: ” + list);

// 3. ローテート: 2つ分右に回転させる
// 例: [A, B, C, D] -> [C, D, A, B]
Collections.rotate(list, 2);
System.out.println(“回転後(2つ分): ” + list);
}
}

応用・注意点

現場で扱う際に注意すべき点が2つあります。

1. 不変リストへの適用:
List.of()などで作成した「不変(Immutable)リスト」に対してこれらのメソッドを呼び出すと、UnsupportedOperationExceptionが発生します。変更が必要な場合は、必ずnew ArrayList<>(list)のように、一度変更可能なリストにコピーしてから操作してください。

2. パフォーマンス:
LinkedListに対してrotateやgetを多用するとパフォーマンスが低下します。ランダムアクセスが頻繁な場合はArrayListを選択するなど、コレクション選びの基本を忘れないようにしましょう。

また、Java 21から導入されたSequenced Collections(LinkedHashSet等)を利用している場合、順序が保証されているため、これらの操作も直感的に行えます。時代に合わせて新しいAPIの特性も把握しておくと、より堅牢なコードが書けますよ。

コメント

タイトルとURLをコピーしました