5. 配列/コレクションを操作するクラス
- 5.1. 配列を操作するクラス
- 5.2. コレクションを操作するクラス
Javaには配列/コレクションを楽に扱うためのユーティリティクラスが提供されています。この章ではそれらのクラスについて説明します。
5.1. 配列を操作するクラス
「java.util.Arrays」は配列を扱う上で便利な機能を提供するユーティリティクラスです。int,doubleなどそれぞれの基本データ型配列に対応するためオーバーローディングされていますが、提供されているメソッドは5種類です。それぞれについて説明します。
static void sort(Object[])
static void sort(Object[], Comparator)
static void sort(Object[], int, int)
static void sort(Object[], int, int, Comparator)
引数に指定された配列の要素を昇順に並び替えます。ソートにはクイックソートが用いられます。intの第2引数・第3引数が指定された場合には、その値の間のインデックスのみがソートの対象になります。
int num[] = {5, 2, 4}; Arrays.sort(num); ...
要素間の比較には、double,floatを除く基本データ型の場合には算術演算子「<」「==」「>」が使用されます。double,floatの場合には「Double.compare(double,double)」「Float.compare(float,float)」メソッドが使用されます。算術演算子を使用した場合の結果と少し異なるので注意してください。Objectの場合には、「compareTo(Object)」メソッドを使用します。「Comparator」を指定した場合には「Comparator.compare(Object,Object)」を使用します。
static int binarySearch(Object[], Object)
static int binarySearch(Object[], Object, Comparator)
第1引数で指定された配列から、第2引数で指定されたオブジェクトを検索します。見つかった場合にはその要素のインデックスを返します。見つからなかった場合には負の値を返します。
double array[] = {3.14, 1.52, 2.22}; Arrays.sort(array); int index = Arrays.binarySearch(array, 1.52); ...
binarySearchメソッドを使用するためには、配列をソートしておく必要があります。ソートしていない配列を引数に指定した場合、結果は保証されません。要素が同じであるかどうかの判定は、sortメソッドにおける比較方法と同じ方法で行われます。
static void fill(Object[], Object)
static void fill(Object[], int, int, Object)
第1引数で指定された配列の要素全てを、第2引数で指定した値に変えます。intの第2・第3引数が指定された場合には、その範囲内の要素にのみ、第4引数の値が適用されます。
float array[] = new float[5]; Arrays.fill(array, 3.14f); ...
配列の初期化に便利なメソッドですので、覚えておくと良いでしょう。
static boolean equals(Object[], Object[])
2つの配列が同じである場合にtrueを返します。配列が同じであるとは、同じ順序で同じ要素が含まれている事です。2つの配列がnullである場合にも同等とみなされます。
byte[] buf1 = new byte[10]; byte[] buf2 = new byte[10]; ... boolean equal = Arrays.equal(buf1, buf2); ...
static List asList(Object[])
指定された配列を基にして、リストを作成します。ただしリストは固定長で、要素を新たに加えたり削除する事はできません。要素の変更は可能です。またその変更は、元の配列に反映されます。
String array[] = {"test0", "test1", "test2"}; List list = Arrays.asList(array); list.set(2, "test3"); ...
各コレクションクラスが持つtoArrayメソッドとで、配列とコレクションクラスとの橋渡しを行うようになっています。また他の4種類のメソッドとは異なり、基本データ型に対応するメソッドはありません。
(実習課題1)
以下のコンソールアプリケーションを作成しなさい。
- 要素が10個以上あるfloatの配列を作成する事。
- その配列に対して、Arraysの「fill」「sort」「binarySearch」メソッドを使用し、その結果をコンソールに表示する事。
(実習課題2)
以下のコンソールアプリケーションを作成しなさい。
- 要素が5個以上あるStringの配列を作成する事。
- Arraysの「asList」メソッドでListに変換し、要素に変更を行う事。またその変更が、元の配列に影響している事を確認する事。
- リストに追加・削除を行う事。その際、どのような例外が発生するか確認する事。