言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Java辞典

  1. トップページ
  2. Java辞典
  3. Arrays.sort() / Arrays.binarySearch()

Arrays.sort() / Arrays.binarySearch()

対応: Java 1.2(1998)

配列を並べ替えたり、並べ替え済みの配列から二分探索で値を高速に検索したりするメソッドです。java.util.Arrays クラスの静的メソッドとして提供されています。

構文

import java.util.Arrays;

// 配列を昇順に並べ替えます(破壊的操作)
Arrays.sort(array);
Arrays.sort(array, int fromIndex, int toIndex);

// オブジェクト配列をカスタム比較器で並べ替えます
Arrays.sort(T[] array, Comparator<? super T> c);

// 並べ替え済み配列から二分探索します
Arrays.binarySearch(array, key);
Arrays.binarySearch(array, int fromIndex, int toIndex, key);

メソッド一覧

メソッド概要
Arrays.sort(array)配列全体を昇順に並べ替えます。プリミティブ型は Dual-Pivot クイックソート、オブジェクト型はTimSort が使われます。
Arrays.sort(array, fromIndex, toIndex)fromIndex から toIndex の直前の範囲だけを並べ替えます。
Arrays.sort(T[] array, Comparator c)Comparator を指定してオブジェクト配列を任意の順序で並べ替えます。
Arrays.binarySearch(array, key)並べ替え済みの配列から key を二分探索します。見つかった場合はインデックス、見つからない場合は負の値を返します。

サンプルコード

sample_ArraysSortBinarysearch.java
import java.util.Arrays;

class ArraysSortBinarysearch {
    public static void main(String[] args) {
        // int 配列を昇順に並べ替えます
        int[] nums = {5, 2, 8, 1, 9, 3};
        Arrays.sort(nums);
        System.out.println(Arrays.toString(nums)); // 『[1, 2, 3, 5, 8, 9]』と出力されます。

        // 一部の範囲だけを並べ替えます
        int[] partial = {5, 2, 8, 1, 9, 3};
        Arrays.sort(partial, 1, 4);
        System.out.println(Arrays.toString(partial)); // 『[5, 1, 2, 8, 9, 3]』と出力されます。

        // 文字列配列を並べ替えます
        String[] members = {"牧瀬紅莉栖", "岡部倫太郎", "椎名まゆり"};
        Arrays.sort(members);
        System.out.println(Arrays.toString(members)); // 辞書順の配列が出力されます。

        // 降順に並べ替えます(Comparator を使用)
        String[] names = {"阿万音鈴羽", "橋田至", "岡部倫太郎", "牧瀬紅莉栖"};
        Arrays.sort(names, (a, b) -> b.compareTo(a));
        System.out.println(Arrays.toString(names)); // 降順の配列が出力されます。

        // binarySearch() で値を検索します(必ず事前に sort してください)
        int[] sorted = {1, 3, 5, 7, 9};
        int idx = Arrays.binarySearch(sorted, 7);
        System.out.println(idx); // 『3』と出力されます。

        // 見つからない場合は負の値が返されます
        System.out.println(Arrays.binarySearch(sorted, 4)); // 負の値が出力されます。
    }
}
ArraysSortBinarysearch.java
javac ArraysSortBinarysearch.java
java ArraysSortBinarysearch
[1, 2, 3, 5, 8, 9]
[5, 1, 2, 8, 9, 3]
[岡部倫太郎, 椎名まゆり, 牧瀬紅莉栖]
[橋田至, 牧瀬紅莉栖, 阿万音鈴羽, 岡部倫太郎]
3
-3

概要

『Arrays.sort()』は配列を昇順に並べ替える静的メソッドです。元の配列を直接書き換える破壊的操作である点に注意してください。元の順序を保持したい場合は事前にコピーを作成してください。

『Arrays.binarySearch()』は二分探索によりO(log n)で値を検索します。二分探索は配列が昇順に並べ替えられていることを前提とします。並べ替えていない配列に使用すると正しい結果が返されない場合があります。見つからない場合の戻り値は -(挿入すべき位置) - 1 という形の負の整数です。

配列のコピーや埋め込みには『Arrays.copyOf() / Arrays.fill()』、配列の比較や文字列化には『Arrays.equals() / Arrays.toString()』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。