Java 配列

配列は、あらゆるプログラミング言語にとって重要なデータ構造の一つです。もちろん、言語によって配列の実装や処理は異なります。

Java 言語で提供される配列は、固定サイズの同型要素を格納するために使用されます。

配列変数を宣言できます。たとえば、numbers

このチュートリアルでは、Java 配列の宣言、作成、初期化について説明し、対応するコードを示します。


配列変数の宣言

プログラムで配列を使用するには、まず配列変数を宣言する必要があります。以下は配列変数の宣言構文です:

dataType[] arrayRefVar; //推奨される方法 或 dataType arrayRefVar[]; //効果は同じですが、推奨される方法ではありません

注意:使用を推奨しますdataType[] arrayRefVarの宣言スタイルで配列変数を宣言します。dataType arrayRefVar[] スタイルは C/C++ 言語由来で、Java で採用されたのは C/C++ プログラマーが Java 言語をすばやく理解できるようにするためです。

例

以下はこの2つの構文のコード例です:

double[] myList; //推奨される方法 或 double myList[]; //効果は同じですが、推奨される方法ではありません

配列の作成

Java 言語では new 演算子を使用して配列を作成します。構文は次のとおりです:

arrayRefVar = new dataType[arraySize];

上記の構文ステートメントは2つのことを行います:

  • 1. dataType[arraySize] を使用して配列を作成します。
  • 2. 新しく作成した配列の参照を変数 arrayRefVar に代入します。

配列変数の宣言と配列の作成は、次のように1つのステートメントで完了できます:

dataType[] arrayRefVar = new dataType[arraySize];

また、次の方法で配列を作成することもできます。

dataType[] arrayRefVar = {value0, value1, ..., valuek};

配列の要素にはインデックスでアクセスします。配列のインデックスは 0 から始まるため、インデックス値は 0 から arrayRefVar.length-1 までです。

例

次のステートメントは、最初に配列変数 myList を宣言し、次に 10 個の double 型要素を含む配列を作成して、その参照を myList 変数に代入します。

TestArray.java ファイルコード:

public class TestArray { public static void main(String[] args) { //配列サイズ int size = 10; //配列の定義 double[] myList = new double[size]; myList[0] = 5.6; myList[1] = 4.5; myList[2] = 3.3; myList[3] = 13.2; myList[4] = 4.0; myList[5] = 34.33; myList[6] = 34.0; myList[7] = 45.45; myList[8] = 99.993; myList[9] = 11123; //すべての要素の合計を計算 double total = 0; for (int i = 0; i < size; i++) { total += myList[i]; } System.out.println("合計は:" + total); } }

上記の例の出力結果は次のとおりです:

总和为: 11367.373

次の図は配列 myList を示しています。ここで、myList 配列には 10 個の double 要素があり、その添字は 0 から 9 です。

java数组结构说明


配列の処理

配列の要素型と配列サイズは確定しているため、配列要素を処理するときは通常、基本ループまたは For-Each ループを使用します。

例

この例は、配列の作成、初期化、操作の方法を完全に示しています:

TestArray.java ファイルコード:

public class TestArray { public static void main(String[] args) { double[] myList = {1.9, 2.9, 3.4, 3.5}; //すべての配列要素を出力 for (int i = 0; i < myList.length; i++) { System.out.println(myList[i] + " "); } //すべての要素の合計を計算 double total = 0; for (int i = 0; i < myList.length; i++) { total += myList[i]; } System.out.println("Total is " + total); //最大の要素を検索 double max = myList[0]; for (int i = 1; i < myList.length; i++) { if (myList[i] > max) max = myList[i]; } System.out.println("Max is " + max); } }

上記の例をコンパイルして実行した結果は次のとおりです:

1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5

For-Each ループ

JDK 1.5 では、For-Each ループまたは拡張 for ループと呼ばれる新しいループタイプが導入されました。これは添字を使用せずに配列を走査できます。

構文は次のとおりです:

for(type element: array)
{
    System.out.println(element);
}

例

この例は、配列 myList のすべての要素を表示するために使用します:

TestArray.java ファイルコード:

public class TestArray { public static void main(String[] args) { double[] myList = {1.9, 2.9, 3.4, 3.5}; //すべての配列要素を出力 for (double element: myList) { System.out.println(element); } } }

上記の例をコンパイルして実行した結果は次のとおりです:

1.9
2.9
3.4
3.5

関数の引数としての配列

配列はメソッドに引数として渡すことができます。

たとえば、次の例は int 配列の要素を出力するメソッドです:

public static void printArray(int[] array) { for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } }

次の例では、printArray メソッドを呼び出して 3, 1, 2, 6, 4, 2 を出力します:

printArray(new int[]{3, 1, 2, 6, 4, 2});

関数の戻り値としての配列

public static int[] reverse(int[] list) { int[] result = new int[list.length]; for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; } return result; }

上記の例では、result 配列が関数の戻り値として使用されています。


多次元配列

多次元配列は配列の配列と見なすことができます。たとえば、2次元配列は特別な1次元配列であり、その各要素は1次元配列です。例:

String[][] str = new String[3][4];

多次元配列の動的初期化(2次元配列を例に)

1. 各次元に直接スペースを割り当てます。形式は次のとおりです:

type[][] typeName = new type[typeLength1][typeLength2];

type は基本データ型と複合データ型にできます。typeLength1 と typeLength2 は正の整数である必要があり、typeLength1 は行数、typeLength2 は列数です。

例:

int[][] a = new int[2][3];

解説:

2次元配列 a は、2行3列の配列と見なすことができます。

2. 最上位の次元から開始して、各次元にスペースを割り当てます。例:

String[][] s = new String[2][]; s[0] = new String[2]; s[1] = new String[3]; s[0][0] = new String("Good"); s[0][1] = new String("Luck"); s[1][0] = new String("to"); s[1][1] = new String("you"); s[1][2] = new String("!");

解説:

s[0]=new String[2]とs[1]=new String[3]最上位の次元に参照スペースを割り当てます。つまり、最上位の次元がデータを保存できる最大長を制限し、次にその各配列要素に個別にスペースを割り当てます。s0=new String("Good")などの操作を行います。

多次元配列の参照(2次元配列を例に)

2次元配列の各要素への参照方法はarrayName[index1][index2]、例えば:

num[1][0];

Arrays クラス

java.util.Arrays クラスは配列を簡単に操作でき、提供されるすべてのメソッドは静的です。

次の機能があります:

  • 配列に値を代入:fill メソッドを使用。
  • 配列のソート:sort メソッドを使用して昇順に並べ替え。
  • 配列の比較:equals メソッドを使用して配列内の要素の値が等しいかどうかを比較。
  • 配列要素の検索:binarySearch メソッドを使用して、ソート済みの配列に対して二分探索を行うことができます。

詳細は次の表を参照してください:

番号 メソッドと説明
1 public static int binarySearch(Object[] a, Object key)
二分探索アルゴリズムを使用して、指定された配列内で指定された値のオブジェクト(Byte、Int、double など)を検索します。配列は呼び出し前にソートされている必要があります。検索値が配列に含まれている場合は検索キーのインデックスを返します。それ以外の場合は (-( を返します。挿入ポイント) - 1)。
2 public static boolean equals(long[] a, long[] a2)
指定された2つの long 型配列が互いに等しい場合、true を返します。2つの配列が同じ数の要素を含み、2つの配列内の対応するすべての要素ペアが等しい場合、これら2つの配列は等しいと見なされます。言い換えれば、2つの配列が同じ順序で同じ要素を含む場合、2つの配列は等しいです。同じメソッドが他のすべての基本データ型(Byte、short、Int など)にも適用されます。
3 public static void fill(int[] a, int val)
指定された int 値を、指定された int 型配列の指定された範囲内の各要素に割り当てます。同じメソッドが他のすべての基本データ型(Byte、short、Int など)にも適用されます。
4 public static void sort(Object[] a)
指定されたオブジェクト配列を、その要素の自然順序に従って昇順に並べ替えます。同じメソッドが他のすべての基本データ型(Byte、short、Int など)にも適用されます。

練習問題

Java 配列テスト

その他の拡張