Java配列


配列は、すべてのプログラミング言語にとって重要なデータ構造の 1 つです。もちろん、言語が異なれば配列の実装方法や処理方法も異なります。

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

100 個の独立変数 (number0、number1、...、number99) を直接宣言する代わりに、numbers[100] などの配列変数を宣言できます。

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


配列変数を宣言する

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

dataType[] arrayRefVar;   // 首选的方法

或

dataType arrayRefVar[];  // 效果相同,但不是首选方法

注: 配列変数を宣言するには、dataType[] arrayRefVar の宣言スタイルを使用することをお勧めします。 dataType arrayRefVar[] スタイルは C/C++ 言語に由来しており、C/C++ プログラマーが Java 言語をすぐに理解できるように Java で採用されています。

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

double[] myList;         // 首选的方法

或

double myList[];         //  效果相同,但不是首选方法

配列の作成

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

arrayRefVar = new dataType[arraySize];

上記の構文ステートメントは 2 つの処理を行います。 things:

  • 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 変数に割り当てます。

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 です。

12-130Q0221Q5602.jpg


配列の処理

配列の要素の型と配列のサイズが決まっているため、配列の要素を処理する場合、通常は基本ループまたはforeachループを使用します。

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

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

foreachループ

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

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

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;
}

上記の例では、関数の戻り値として結果の配列を使用しています。


Arraysクラス

java.util.Arraysクラスは配列を便利に操作でき、提供するメソッドはすべて静的です。次の機能があります:

  • fill メソッドを通じて、配列に値を割り当てます。

  • 配列を並べ替えます。sort メソッドを使用して昇順に並べます。

  • 配列の比較: 配列内の要素の値が等しいかどうかを、equals メソッドを通じて比較します。

  • 配列要素の検索: binarySearch メソッドを使用して、ソートされた配列に対して二分検索操作を実行できます。

具体的な手順については、以下の表をご確認ください:

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