はじめに
プログラミングにおいて、データの管理と操作は欠かせないスキルですね。
Javaの配列もその一つで、多くのデータを効率的に管理できる素晴らしいツールを提供しています。
この記事では、JavaのArraysクラスが提供する、役立つメソッドたちをピックアップして、具体的なコード例とともに解説を深めていきます。
KindleUnlimited会員であれば、全ての本をご覧頂けます。 StreamAPIを理解すれば、Javaの世界が変わる 第1版
binarySearchメソッド
binarySearchメソッドは、ソートされた配列に対して、指定された要素をバイナリサーチ(二分探索)アルゴリズムを使用して検索します。
指定された要素が配列内で見つかった場合、そのインデックスを返します。
見つからなかった場合は、負の値(-(挿入ポイント) - 1)を返しますね。
ポイント
バイナリサーチは非常に効率的な検索アルゴリズムであり、大きなデータセットに対しても高速に動作します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 |
import java.util.Arrays; public class Program { public static void main(String[] args) { int[] array = {1, 3, 5, 7, 9}; int target = 5; int resultIndex = Arrays.binarySearch(array, target); System.out.println("Index of " + target + ": " + resultIndex); } } |
出力結果
Index of 5: 2
copyOfメソッドで配列を簡単コピー
copyOfメソッドは、指定された配列を、指定された長さの新しい配列にコピーしますね。
もし、新しい配列の長さが元の配列よりも長い場合、追加された要素は0(数値型の場合)またはnull(オブジェクト型の場合)になります。
ポイント
copyOfメソッドは元の配列のデータを保持したまま、配列のサイズを調整する場面で役立ちます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 |
import java.util.Arrays; public class Program { public static void main(String[] args) { int[] original = {1, 2, 3, 4, 5}; int[] copied = Arrays.copyOf(original, 7); System.out.println("Original array: " + Arrays.toString(original)); System.out.println("Copied array: " + Arrays.toString(copied)); } } |
出力結果
Original array: [1, 2, 3, 4, 5] Copied array: [1, 2, 3, 4, 5, 0, 0]
copyOfRangeメソッドで範囲を指定してコピー
copyOfRangeメソッドは、指定された配列の指定された範囲を新しい配列にコピーします。
これは、配列の一部だけを新しい配列にコピーする際に便利ですね。ここでは、元の配列の開始インデックスと終了インデックスを指定して、その範囲を新しい配列にコピーします。
ポイント
copyOfRangeメソッドは開始インデックスは含み、終了インデックスは含まない点に注意です。たとえば、[1, 3) と指定すれば、インデックス1からインデックス2までをコピーします。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 |
import java.util.Arrays; public class Program { public static void main(String[] args) { int[] original = {10, 20, 30, 40, 50}; int[] copied = Arrays.copyOfRange(original, 1, 4); System.out.println("Original array: " + Arrays.toString(original)); System.out.println("Copied array with range: " + Arrays.toString(copied)); } } |
出力結果
Original array: [10, 20, 30, 40, 50] Copied array with range: [20, 30, 40]
toStringメソッドで配列を見やすく出力
toStringメソッドは、配列の内容を読みやすいString形式で出力するのに役立ちます。
Javaの配列は、デフォルトでtoStringメソッドをオーバーライドしていないため、出力すると参照アドレスが表示されてしまいます。しかし、ArraysクラスのtoStringメソッドを使えば、配列の内容をきれいにフォーマットして出力できます。
ポイント
Arrays.toStringメソッドは、配列の各要素を適切なString形式で出力し、要素間をカンマで区切り、全体を"[]"で囲みます。これにより、配列の内容が一目で分かる出力を得ることができます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 |
import java.util.Arrays; public class Program { public static void main(String[] args) { int[] numbers = {10, 20, 30, 40, 50}; System.out.println("Without toString: " + numbers); System.out.println("With toString: " + Arrays.toString(numbers)); } } |
出力結果
Without toString: [I@1540e19d With toString: [10, 20, 30, 40, 50]
deepHashCodeメソッドで多次元配列も安全にハッシュコードを取得
deepHashCodeメソッドは、多次元配列を安全にハッシュコードに変換するメソッドです。
一次元配列に対してはhashCodeメソッドを、多次元配列に対してはdeepHashCodeメソッドを利用します。これにより、多次元配列でも正確なハッシュコードを計算することが可能になります。
ポイント
deepHashCodeメソッドは、配列の全要素(多次元配列の場合は再帰的に)のハッシュコードを計算し、それらを一つのハッシュコードとして返します。このメソッドを利用することで、多次元配列の内容が変更されていないか等を確認することが可能になります。
ソースコード例
1 2 3 4 5 6 7 8 9 10 |
import java.util.Arrays; public class Program { public static void main(String[] args) { int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int deepHashCode = Arrays.deepHashCode(matrix); System.out.println("Deep hash code: " + deepHashCode); } } |
出力結果
Deep hash code: -805245075
deepToStringメソッドで多次元配列も簡単に文字列化
多次元配列の要素をすべて文字列にしてくれる「deepToString」メソッド。
このメソッドを使えば、多次元配列もその要素をすべて一つの文字列として取り出すことができます。これにより、多次元配列の全要素を網羅的かつ読みやすく出力できるので、デバッグ時などに大変便利です。
ポイント
「deepToString」は各要素を文字列化してくれるため、配列の中身を一目で確認することができます。特に、多次元配列の場合、要素がどのように格納されているかをすぐに把握することができるので非常に便利です。
ソースコード例
1 2 3 4 5 6 7 8 9 10 |
import java.util.Arrays; public class Program { public static void main(String[] args) { int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; String deepToString = Arrays.deepToString(matrix); System.out.println("Deep string representation: " + deepToString); } } |
出力結果
Deep string representation: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
まとめ
本記事では、Javaでよく使用される配列メソッドとして、binarySearch、copyOf、copyOfRange、toString、deepHashCode、deepToStringについて学びました。
それぞれのメソッドが持つ役割と、実用例を通じて具体的な使用法を解説しましたね。
ポイント
ここで学んだメソッドは、日々のプログラミングやアプリケーション開発、システム開発の現場で頻繁に利用されます。この知識をベースに、更なるスキルアップを目指しましょう!