Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Java辞典

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

Arrays.sort() / Arrays.binarySearch()

配列を並べ替えたり、並べ替え済みの配列から二分探索で値を高速に検索したりするメソッドです。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 を二分探索します。見つかった場合はインデックス、見つからない場合は負の値を返します。
サンプルコード
import java.util.Arrays;

// 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); // インデックス1〜3(2, 8, 1)だけを並べ替えます。
System.out.println(Arrays.toString(partial)); // 『[5, 1, 2, 8, 9, 3]』と出力されます。

// 文字列配列を並べ替えます。
String[] fruits = {"banana", "apple", "cherry"};
Arrays.sort(fruits);
System.out.println(Arrays.toString(fruits)); // 『[apple, banana, cherry]』と出力されます。

// 降順に並べ替えます(Comparator を使用)。
String[] langs = {"Java", "Python", "C", "Swift"};
Arrays.sort(langs, (a, b) -> b.compareTo(a));
System.out.println(Arrays.toString(langs)); // 降順の配列が出力されます。

// 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)); // 負の値が出力されます。
概要

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

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

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

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