CodeGym /Java Blog /ランダム /Javaの配列
John Squirrels
レベル 41
San Francisco

Javaの配列

ランダム グループに公開済み
保管室のキャビネットを想像してください。それぞれに独自の番号があり、それぞれに何らかの Baggage オブジェクトが格納されます。または、あらゆる種類のワインに番号が付けられており、飲み物の番号を指定して注文するワインリストもあります。または、「Adams」が最初の位置に記録され、「Zimmer」が最後に記録されている生徒のリスト。または、飛行機の乗客のリストで、各乗客には番号の付いた座席が割り当てられています。Java では、このような構造、つまり同種のデータのセットを操作するために配列がよく使用されます。

CodeGym コースの配列

CodeGym では、Java 構文クエストのレベル 7 で配列の操作を開始します。3 つのレッスンはそれらに当てられており、配列を扱うスキルを強化するためのさまざまなレベルの 8 つのタスクも含まれています。ただし、コース中に何度も配列に遭遇することになります (特に、Array クラスはJava コレクションクエストと今後の作業の一部として 学習します) 。

配列とは何ですか?

配列は、同じ型の要素を格納するデータ構造です。これは、番号が付けられた一連のセルと考えることができます。各セルにデータを入力できます (セルごとに 1 つのデータ要素)。特定のセルには、その番号を使用してアクセスします。配列内の要素の番号は、 インデックス とも呼ばれます。Java では、配列は同種です。つまり、そのすべてのセルに同じ型の要素が含まれています。したがって、整数の配列には整数 ( int ) のみが含まれ、文字列の配列には文字列のみが含まれ、作成したDogクラスのインスタンスの配列にはDogオブジェクトのみが含まれます。言い換えれば、Java では、配列の最初のセルに整数を、2 番目のセルにString を、3 番目のセルに Dog を置くことはできません。Java の配列 - 2

配列の宣言

配列はどうやって宣言するのでしょうか?

他の変数と同様、配列も Java で宣言する必要があります。これは 2 つの方法のいずれかで実行できます。これらは同等ですが、最初の方法の方が Java スタイルとの一貫性が高くなります。2 つ目は C 言語の遺産です。多くの C プログラマーが Java に切り替えましたが、利便性を考慮して代替メソッドが残されました。この表は、Java で配列を宣言する両方の方法を示しています。
いいえ。 配列の宣言、Java 構文 コメント
1.
dataType[] 配列名;

int[] myArray;

Object[] 
arrayOfObjects;  
この方法で配列を宣言することをお勧めします。これがJavaスタイルです。
2.
データ型配列名[];

int myArray[];

Object 
arrayOfObjects[];
C/C++ から継承された配列宣言メソッドは Java で動作します
どちらの場合も、dataType は配列内の変数の型です。例では、2 つの配列を宣言しました。1 つはintを格納し、もう 1 つはObjectオブジェクトを格納します。したがって、配列宣言には名前と型 (配列の要素の型) があります。ArrayNameは配列の名前です。

配列の作成

配列はどのように作成しますか?

他のオブジェクトと同様に、 new演算子を使用して Java 配列を作成できます。つまり、その配列用にメモリ内に場所を予約します。やり方は次のとおりです。

new typeOfArray[length]; 
ここで、typeOfArrayは配列のタイプ、lengthは整数 ( int) で表されるその長さ (つまり、セルの数) です。ただし、ここでは配列にメモリを割り当てただけであることに注意してください。宣言された配列を以前に宣言された変数に関連付けていないことです。通常、配列は最初に宣言されてからインスタンス化されます。次に例を示します。

int[] myArray; // Array declaration
myArray = new int[10]; // Create (allocate memory for) an array of 10 ints
ここでは、 myArray という整数の配列を作成し、それが 10 個のセル (各セルに整数が含まれる) で構成されていることをコンパイラーに通知しました。ただし、次の省略された構文を使用して、配列が宣言されたときにすぐに配列を作成する方がはるかに一般的です。

int[] myArray = new int [10]; // Declare the array and allocate memory "in one blow"
ご注意ください:new演算子を使用して配列が作成されると、そのセルにはデフォルト値が含まれます。(この例のように) 数値型の場合、デフォルト値は 0 で、ブール型の場合はfalse、参照型の場合はnullです。したがって、このステートメントを実行した後、

int[] myArray = new int[10];
10 個の整数の配列を取得しますが、プログラムが値を変更するまで、各セルには 0 が含まれます。

配列の詳細については、記事「配列について」を参照してください。

Javaの配列の長さ

上で述べたように、配列の長さは、配列が保持するように設計された要素の数です。配列の長さは、作成後に変更することはできません。 ご注意くださいJava では配列要素には 0 から始まる番号が付けられます。したがって、10 個の要素からなる配列がある場合、最初の要素のインデックスは 0、最後の要素のインデックスは 9 になります。 Java の配列 - 3さ変数を使用して配列の長さを取得できます。例えば:

int[] myArray = new int[10]; // Create an int array for 10 elements and name it myArray
System.out.println(myArray.length); // Display the array's length, i.e. the number of elements we can put into the array
出力:

10

配列の初期化とその要素へのアクセス

これで、Java で配列を作成する方法がわかりました。このプロセスでは、空の配列ではなく、デフォルト値が入った配列が取得されます。たとえば、int配列の場合、これは 0 であり、任意の参照型の配列がある場合、各セルのデフォルトはnullです。インデックスによって配列要素にアクセスします (たとえば、値を設定したり、画面に表示したり、何らかの操作を実行したりするため)。配列の初期化は、配列に特定の値 (デフォルト以外) を入力するプロセスです。 例:四季の文字列配列を作成し、季節の名前を入力してみましょう。

String[] seasons = new String[4]; /* Declare and create an array. Java allocates memory for an array of 4 strings, and each cell is set to null (since String is a reference type) */ 

seasons[0] = "Winter"; /* We set the first cell, i.e. the cell with index zero, to "Winter". Here we access the zeroth element of the array and write a specific value to it. */ 
seasons[1] = "Spring"; // We follow a similar procedure for the cell with index 1 (the second cell)
seasons[2] = "Summer"; // ... index 2
seasons[3] = "Autumn"; // and finally, index 3
これで、季節の名前が配列の 4 つのセルに書き込まれます。宣言と初期化を組み合わせて、別の方法で配列を初期化することもできます。

String[] seasons = new String[] {"Winter", "Spring", "Summer", "Autumn"};
さらに、new演算子は省略できます。

String[] seasons = {"Winter", "Spring", "Summer", "Autumn"};

Java で配列を画面に表示するにはどうすればよいですか?

forループを使用して、配列要素を画面 (つまり、コンソール) に表示できます。配列を表示する別の短い方法については、「配列を操作するための便利な方法」というタイトルの段落で説明します。それまでの間、ループを使用して配列が表示されるこの例を見てください。

String[] seasons = new String {"Winter", "Spring", "Summer", "Autumn"}; 
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]); 
}
プログラムは次のように表示します。

Winter 
Spring 
Summer 
Autumn

Java における 1 次元配列と多次元配列

しかし、数値、文字列、その他のオブジェクトの配列ではなく、配列の配列を作成したい場合はどうすればよいでしょうか? Java を使用するとこれが可能になります。私たちがすでによく知っている種類の配列 ( int[] myArray = new int[8] ) は、1 次元配列として知られています。ただし、配列の配列は 2 次元配列と呼ばれます。これは、行番号と列番号を持つテーブルのようなものです。あるいは、線形代数の基礎を学習している場合は、線形代数を行列として考えることができます。 Java の配列 - 4なぜそのような配列が必要なのでしょうか? そうですね、行列やテーブル、同様の構造を持つ他のオブジェクトをプログラムするためです。たとえば、チェス盤は 8x8 配列で表すことができます。多次元配列は次のように宣言および作成されます。

Int[][] myTwoDimentionalArray = new int[8][8];
この配列には正確に 64 個の要素があります: myTwoDimentionalArray[0][0]myTwoDimentionalArray[0][1]myTwoDimentionalArray[1][0]myTwoDimentionalArray[1][1]など、 myTwoDimentionalArray[7][7]まで。したがって、これをチェス盤を表すために使用する場合、 A1 はmyTwoDimentionalArray[0][0]に対応し、E2 はmyTwoDimentionalArray[4][1]に対応します。しかし、これをどこまで推し進められるでしょうか? Java では、配列の配列、配列の配列の配列などを指定できます。もちろん、3 次元以上の配列が使用されることはほとんどありません。とはいえ、たとえば、3 次元配列を使用してルービック キューブをプログラムすることもできます。

配列を操作するための便利なメソッド

Java には、配列を操作するためのjava.util.Arraysクラスがあります。一般に、配列に対して実行される最も一般的な操作は、初期化 (要素の入力)、要素の取得 (インデックスによる)、並べ替え、および検索です。配列の検索と並べ替えについては、また別の日に取り上げます。一方で、いくつかの検索および並べ替えアルゴリズムを自分で作成することをお勧めします。一方、優れたアルゴリズムはすべてすでに実装されており、標準 Java ライブラリに含まれており、合法的に使用できます。このクラスの便利なメソッドを 3 つ紹介します。

配列のソート

void sort(int[] myArray, int fromIndex, int toIndex)メソッドは、整数配列または部分配列を昇順にソートします。

配列内の要素を検索する

int binarySearch(int[] myArray, int fromIndex, int toIndex, int key)このメソッドは、ソートされたmyArray配列またはサブ配列内のキー要素をfromIndexからtoIndexまで検索します。項目が見つかった場合は、そのインデックスを返します。それ以外の場合は、(-fromIndex)-1を返します。

配列を文字列に変換する

String toString(int[] myArray)メソッドは、配列を文字列に変換します。Java では、配列はtoString()をオーバーライドしません。これは、「画面に配列を表示する」というタイトルの段落のように、一度に 1 つの要素を表示するのではなく、配列全体を一度に表示しようとすると(System.out.println(myArray))、次のような結果が得られることを意味します。クラスの名前と配列の 16 進ハッシュ ( Object.toString()で定義)。初心者の方はtoStringメソッドの説明がよくわからないかもしれません。最初はその必要はありませんが、このメソッドを使用すると配列を簡単に表示できます。Java を使用すると、ループを使用せずに簡単に配列を表示できます。以下の例はこれを示しています。

sort、binarySearch、toString を使用した例

整数の配列を作成し、toStringを使用して表示し、 sortメソッドを使用して並べ替えて、その中の数値を見つけてみましょう。

class Main {
    public static void main(String[] args) {
        int[] array = {1, 5, 4, 3, 7}; // Declare and initialize the array
        System.out.println(array); // Try to display our array without using the toString method — the result is a hexadecimal number
        System.out.println(Arrays.toString(array)); // Display the array correctly 
        Arrays.sort(array, 0, 4); // Sort the entire array from the zeroth to the fourth element
        System.out.println(Arrays.toString(array)); // Display the sorted array
        int key = Arrays.binarySearch(array, 5); // Look for the number 5 in the sorted array. 
        // The binarySearch method will return the index of the array element we are searching for
        System.out.println(key); // Display the index of the number we searched for 
System.out.println(Arrays.binarySearch(array, 0)); // Now try to find a number that isn't in the array, 
        // and immediately display the result

    }
}
出力:

[I@1540e19d 
[1, 5, 4, 3, 7] 
[1, 3, 4, 5, 7] 
3 
-1
最初の文字列は、 toString を使用せずに配列を表示しようとしています。2 番目は、 toStringを使用して表示される配列です。3 番目はソートされた配列です。4 番目は、ソートされた配列内で検索した数値 (5) のインデックスです (ゼロからカウントするため、配列の 4 番目の要素のインデックスは 3 であることに注意してください)。5 番目の文字列には -1 が表示されます。これは無効な配列インデックスです。これは、検索した数値 (この場合は 0) が配列にないことを示します。

Array クラスのメソッドの詳細

Arrays クラスとその使用法 — この記事では、Array クラスのいくつかのメソッドについて説明します
Arrays クラスには、配列を操作するための 18 の重要なメソッドがあります

配列の概要

  • 配列の基本的な特性: 配列に配置されるデータのタイプ、名前、長さ。
    最後のプロパティは、配列の作成時 (配列にメモリが割り当てられたとき) に決定されます。最初の 2 つのプロパティは、配列の宣言時に決定されます。

  • 配列サイズ (セル数) はintでなければなりません

  • 配列の作成後に配列の長さを変更することはできません。

  • 配列要素にはインデックスによってアクセスできます。

  • Java の他の要素と同様に、配列内の要素には 0 から始まる番号が付けられます。

  • 配列が作成されると、デフォルト値が設定されます。

  • Java の配列は C++ の配列と同じではありません。これらは動的配列へのポインタに似ています。

配列に関する役立つ資料

配列についてもっと知りたいですか? 以下の記事をご覧ください。このトピックに関する興味深く役立つ資料がたくさんあります。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION