Javaで配列の作り方と使い方

Javaで配列を作成する方法や使い方について、標準の機能とよく使われるListやArrayListを使った方法について説明します

Javaの配列

配列の考え方は他の言語と同じく、1つの変数に複数の値を格納する仕組みです。

標準の機能で配列を作成するには、以下のように配列のインスタンスを作成します。

int[] num = new int[5];

こうすることでnumという変数に配列を作成します。

この場合int型の5つの要素を持つ配列となります。

配列を作成するときに値が格納されてない場合は、型によって値の扱いが変わります。

intなどの数値の型では、「0」と識別します。

boolean型では、「false」と識別します。

String型のようなクラス型では、「null」と識別します。

配列を作成するときに初期値を含めて配列を作成することができます。

int[] nums = {61, 54, 65, 80, 59};

これで初期値が格納された5つの要素を持つ配列を作成できます。

配列の要素にアクセス(参照や変更)するには変数の[]にインデックス(添字)を指定します。

変数[インデックス]

インデックスは要素の左端より「0」から始まります。

nums[0]は61、nums[1]は54、nums[2]は65・・・となります。

例文)

public class Main {
 public static void main(String[] args) {
  int[] nums = {61, 54, 65, 80, 59};
  for (int i = 0; i < nums.length; i++) {
   System.out.println("nums[" + i + "] = " + nums[i]);
  }
 }
}

Javaの標準機能ではこのように配列を扱いますが、配列の要素を追加したり削除したりができません。

配列を作成するときに指定した大きさが固定となります。

そこでListやArrayListを使います。

ListやArrayListの使い方

ListやArrayListを使って簡単に可変配列を作成することができます。

これらのクラスで作成した配列は要素を追加・削除することができます。

それに応じて配列の大きさが変化します。

使い方は以下のように書きます。

List<型> 配列名 = new ArrayList<型>();

例文)

public class Main {
 public static void main(String[] args) {
  List<Integer> nums = new ArrayList<Integer>();

  nums.add(61);
  nums.add(54);
  nums.add(65);
  nums.add(80);
  nums.add(59);
  for (Integer num : nums) {
   System.out.println("nums[" + nums.indexOf(num) + "] = " + num);
  }
 }
}

空で作成した配列に必要に応じて要素を追加できます。

要素の値を変更するときは以下のようにします。

nums.set(1, 70);

これはインデックス1の要素を70に変更します。

つまり2番目の要素が変更されます。

public class Main {
 public static void main(String[] args) {
  List<Integer> nums = new ArrayList<Integer>();

  nums.add(61);
  nums.add(54);
  nums.add(65);
  nums.add(80);
  nums.add(59);
  for (Integer num : nums) {
   System.out.println("nums[" + nums.indexOf(num) + "] = " + num);
  }

  nums.set(1, 70);
  System.out.println("変更:" + nums);
 }
}

要素を削除するときは以下のようにします。

nums.remove(2);

これはインデックス2の要素を削除します。

つまり3番目の要素が削除されます。

public class Main {
 public static void main(String[] args) {
  List<Integer> nums = new ArrayList<Integer>();

  nums.add(61);
  nums.add(54);
  nums.add(65);
  nums.add(80);
  nums.add(59);
  for (Integer num : nums) {
   System.out.println("nums[" + nums.indexOf(num) + "] = " + num);
  }

  nums.set(1, 70);
  System.out.println("変更:" + nums);

  nums.remove(2);
  System.out.println("削除:" + nums);
 }
}

このようにListやArrayListを使うことで配列が扱いやすくなります。

またここではList型の変数にArrayListのインスタンスを代入していますが、以下でも同じように扱えます。

ArrayList<Integer> nums = new ArrayList<Integer>();

List型の変数に代入するのと、ArrayList型の変数に代入するのと何が違うのでしょうか。

これは配列を扱う機能が変わります。

ArrayList型で配列を扱うと、ArrayListにしかない機能を扱うことができます。

例えば、配列をコピーするcloneメソッドはArrayList型で使うことができます。

cloneはList型では使用できません。

一方で、List型は配列を異なった型の配列に変更することができます。

例えば、List型からLinkedList型の配列を作成することができます。

List<Integer> nums = new ArrayList<Integer>();
nums.add(61);
nums.add(54);
nums.add(65);
LinkedList<Integer> links = new LinkedList<Integer>(nums);

LinkedListはArrayListと比べて処理が速いと言われています。

ArrayList固有の機能の使うときはArrayList型で作成して、配列を作成後も汎用的に扱いたいときはList型で作成すればいいでしょう。

まとめ

配列は標準機能よりもListやArrayListを使ったほうが扱いやすいです。

配列の扱いはプログラミングするときにはほぼ必須になるのでListやArrayListの使い方に慣れておきましょう。