JavaのArraysクラスにおける基本4メソッドの使い方とArrayListとの連携方法

こんにちは。ゆうせいです。

Javaで複数のデータをまとめて扱う際、配列やArrayListという仕組みがよく使われます。配列は学校の下駄箱のように、最初から管理できる箱の数が決まっている入れ物です。一方のArrayListは、中身の増減に応じて箱の数が自動的に変わる、伸縮自在な引き出しのような仕組みを持っています。

Arraysクラスは、このうちの配列を便利に操作するための道具箱のような存在です。ArrayListと配列は互いに変換して処理することが多いため、Arraysクラスのメソッドを理解することは、ArrayListを使いこなす上でも非常に重要です。今回は、特によく使われる4つのメソッドについて、それぞれの役割とメリット、デメリットを解説します。

Arrays.toStringメソッド

Arrays.toStringメソッドは、配列の中にどのようなデータが入っているかを文字列として分かりやすく表示するための仕組みです。

役割と比喩

配列の中身をそのまま画面に出力しようとすると、メモリ上の割り当て場所を示す暗号のような文字列が表示されてしまいます。Arrays.toStringメソッドは、いわば箱の中に入っている品物を一覧表にまとめてプリントアウトしてくれる役割を果たします。

メリットとデメリット

  • メリット:データの全容を確認する際、要素を1つずつ取り出すループ処理を記述する必要がなく、1行のコードで中身を確認できます。
  • デメリット:配列の中にさらに配列が入っているような多次元配列に対しては、中身を正しく文字列に変換できません。多次元配列の場合はArrays.deepToStringメソッドという別の仕組みが必要になります。

具体的なコード例

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String[] array = {"りんご", "みかん", "ぶどう"};
        String result = Arrays.toString(array);
        System.out.println(result);
    }
}

Arrays.sortメソッド

Arrays.sortメソッドは、配列の中身を特定の規則に従って並び替えるための仕組みです。

役割と比喩

バラバラに置かれた出席番号のカードを、数字の小さい順、あるいは五十音順にきれいに整列させる作業を自動で行ってくれる役割を持ちます。

メリットとデメリット

  • メリット:計算の手間が少なくなるよう最適化されたアルゴリズムが内部で動いているため、大量のデータであっても高速に並び替えることができます。
  • デメリット:元の配列の並び順が直接書き換えられてしまいます。並び替える前の状態を保存しておきたい場合は、事前に配列のコピーを作成しておく必要があります。

具体的なコード例

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] numbers = {5, 3, 8, 1};
        Arrays.sort(numbers);
        System.out.println(Arrays.toString(numbers));
    }
}

Arrays.binarySearchメソッド

Arrays.binarySearchメソッドは、配列の中から目的のデータがどこにあるかを探し出すための仕組みです。

役割と比喩

国語辞典から目的の単語を探す際、本のちょうど真ん中のページを開き、単語が前半と後半のどちらにあるかを判断して、探す範囲を半分ずつに絞り込んでいく手法を用います。この効率的な探し方を専門用語で二分探索と呼びます。

メリットとデメリット

  • メリット:端から順番にデータを1つずつ確認していく線形探索という方法に比べ、データ量が非常に多い場合でも極めて高速にインデックス(要素の位置を示す番号)を見つけることができます。
  • デメリット:探す対象の配列が、あらかじめArrays.sortメソッドなどを用いて昇順に並び替えられていなければなりません。整列していない配列に対して使用すると、間違った位置が返されるという問題が発生します。

具体的なコード例

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 3, 5, 8};
        int index = Arrays.binarySearch(numbers, 5);
        System.out.println(index);
    }
}

Arrays.asListメソッド

Arrays.asListメソッドは、配列のデータをListという型に変換するための仕組みです。

役割と比喩

大きさが固定された木箱(配列)に入っている荷物を、持ち運びや操作がしやすい書類カバン(List)に移し替えるような役割を持ちます。この処理を挟むことで、複数の初期データを持ったArrayListを簡単に作ることができます。

メリットとデメリット

  • メリット:初期データを持ったArrayListを生成する際、何行も追加処理を書くことなく、1行で簡潔に記述できるようになります。
  • デメリット:Arrays.asListメソッドによって生成された直後のListは、中身の要素数を後から変更できない仕様になっています。そのため、要素を追加したり削除したりしようとするとエラーが発生します。要素の増減を行いたい場合は、生成されたListをさらに新しいArrayListのコンストラクタに渡して、新しくArrayListのインスタンスを作る必要があります。

具体的なコード例

import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String[] array = {"赤", "青", "黄"};
        List<String> list = Arrays.asList(array);
        ArrayList<String> arrayList = new ArrayList<>(list);
        arrayList.add("緑");
        System.out.println(arrayList);
    }
}

まとめ

Arraysクラスの4つのメソッドを理解することで、Javaにおけるデータの操作効率は大幅に向上します。ArrayListと配列は、それぞれの特徴を活かして組み合わせて使われることが多いため、双方の変換処理に慣れておくことが大切です。

今後の学習は、以下のステップに沿って進めてみてください。

  • ステップ1:今回紹介したコードを実際に開発環境に貼り付け、プログラムが意図通りに動くか実行結果を確認します。
  • ステップ2:Arrays.asListメソッドで作成した直後のListに対して、要素の追加処理を実行し、どのようなエラーが発生するかを実際に確認します。
  • ステップ3:ArrayListに格納されたデータをtoArrayメソッドで一度配列に変換し、Arrays.sortメソッドで並び替えてからArrays.toStringメソッドで出力するという、一連の連携処理を自身で実装します。

これらのステップを順に実践することで、Javaのコレクションフレームワークに対する理解がより確固たるものになります。

セイ・コンサルティング・グループ株式会社では新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。