Javaの配列とリスト

Javaの配列の使い方でお悩みなあなたへ。この記事では、配列の宣言や初期化、長さ(要素数)、要素の追加などの使い方をサンプルを交えてご紹介します。配列に似たリストについてもご紹介します。

配列とリスト、マップの違い

Javaでは、複数のデータを扱うためのデータ構造として配列、リスト及びマップがある。それぞれの特徴を次表に示す。

配列 リスト マップ
生成時に要素の数を決める必要があるか Yes No No
生成後に要素の数を変更できるか No Yes Yes
順序付けられているか Yes Yes No

宣言

配列を宣言する構文を次に示します。

データ型 変数名[];
boolean foo[];
int bar[];
double baz[];

初期化

配列を初期化する構文を次に示します。

変数名 = new データ型[要素の数];

配列の宣言と初期化を行う例を次に示します。

int a[];
a = new int[10];

1行にまとめて記述することもできます。

int a[] = new int[10];

初期値を与えて初期化する方法もあります。初期値で与えた値の数だけ要素が作成されます。

データ型 変数名[] = { カンマで区切った値のリスト };
int a[] = { 1, 2, 3 };

要素数

配列の要素の数を知るには、変数名.length を参照します。

int i = a.length;

配列のコピー

配列をコピーするには、System.arraycopy メソッドを使用します。

arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

オブジェクトの配列 src から dest にコピーします。

int a[] = { 1, 2, 3 };
int b[] = new int[3];

System.arraycopy(a, 0, b, 0, a.length);

配列のクラスArray

java.util.Arrayは配列を操作するクラスである。

配列の中に一致する要素があるか調べる。

String[] s = { "foo", "bar", "baz" };

if (Arrays.asList(s).contatins("bar"));
{
  // 存在する
} else {
  // 存在しない
}

ソート

配列を昇順にソート(並び替え)するには、java.util.Arraysクラスのsortメソッドを使う。

static void sort(byte[] a)
static void sort(char[] a)
static void sort(short[] a)
static void sort(int[] a)
static void sort(long[] a)
static void sort(float[] a)
static void sort(double[] a)
static void sort(Object[] a)
import java.util.Arrays;
public class Example {
  public static void main(String[] args) {
    int[] a = {5, 1, 4, 2, 3};
    System.out.println(Arrays.toString(a));
    Arrays.sort(a);
    System.out.println(Arrays.toString(a));
  }
}

追加

Javaの配列は初期化したときに要素数が決まり、後から要素を追加することはできない。

要素を後から追加したい場合は、配列ではなくjava.util.Listクラスを使う。

import java.util.List;
public class Example {
  public static void main(String[] args) {
    List<int> l = new ArrayList<int>();
    l.add(10);
  }
}

リスト

空のリストを生成するには、java.util.Collections#emptyListを使う。

List<String> stringList = Collections.emptyList();