目次
前書き
プログラムがint型の5つの変数を必要とする場合、私たちが学んだ基本的な知識を使用して、次のコードを使用して変数を宣言できます。
int a1,a2,a3,a4,a5;
しかし、ある日突然、100個の変数を宣言する必要がある場合、どうすればよいでしょうか。百回もコピーできませんよね?
このソリューションを解決するには、配列の知識を学ぶ必要があります。
配列は、同じタイプの変数で構成される複合データ型であり(配列は同じタイプの変数のコレクションです)、同じタイプのこれらの変数は、配列の要素またはユニットと呼ばれます。
アレイ導入の概要
- 一度に多数の変数を宣言します
- 保存するのと同じタイプのデータ
配列定義形式
1次元配列を宣言するための2つの形式があります
フォーマット1:
//数组类型 [] 数组名
int [] arr;
//定义一个数组,数组名为arr
フォーマット2:
//数组类型 数组名[]
char arr[];
//定义一个char类型的变量,变量名为arr的数组
一度に複数の配列を宣言できます。
int [] a,b,c,d,e;
配列の初期化の概要
Javaの配列は、使用する前に初期化する必要があります
いわゆる初期化:配列内の配列要素にメモリスペースを割り当て、各配列要素に値を割り当てることです
動的初期化
動的初期化:初期化中に配列の長さのみを指定すると、システムは初期化値を配列に割り当てます
形式:データ型[]変数名=新しいデータ型[データ長];
デモンストレーション:
int [] arr = new int[3];
分析:
- int []:これがint型の配列であることを示します
- arr:配列名
- 新規:アレイのメモリスペースを申請します
- int [3]:これはint型の配列であり、3は配列の長さであり、配列に格納されている要素の数です。
配列要素の割り当てと使用
割り当てる前に、インデックスを理解する必要があります。インデックスは、配列内のデータの番号付け方法です。
- 機能:インデックスは配列内のデータにアクセスするために使用されます。配列名[インデックス]は変数名と同等であり、特別な変数名です。
- 機能1:インデックスは0から始まります
- 特徴2:インデックスは継続的です
- 特徴3:インデックスは増加するたびに1つずつ増加します
配列内の要素にアクセスしようとします。値を割り当てる前は、配列内のデータはすべて0です。
配列の割り当て
形式:配列名[インデックス] =定数
デモンストレーション:
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
静的初期化
静的初期化:初期化中に各配列要素の初期値を指定し、配列の長さはシステムによって決定されます
- 形式:データ型[]変数名=新しいデータ型[] {データ1、データ2、データ3、...};
- 例:int [] arr = new int [] {1,2,3};
- 簡略化された形式:データ型[]変数名= {データ1、データ2、データ3、...};
- 例:int [] arr = {1,2,3};
複数の静的配列の初期化:
int arr[] = {1,2,3},arr1 [] ={5,6,7};
二次元配列
2次元配列は複数の1次元配列で構成されており、Excelの表で2次元配列を鮮やかに表現できます。
この表のように、2次元配列を表すことができます(図は、3行2列の2次元配列を示しています)
2次元配列を宣言します。
- 配列型配列名[] [];
- 配列タイプ[] []配列名;
動的初期化
2次元配列が宣言された後、新しい操作は配列にスペースを割り当てます。
int arr[][] = new int[3][2];
アピールによって作成された2次元配列arrは、3行2列を表すことができます。
2次元配列割り当てのデモンストレーション:
arr[0][0] = 1;
arr[0][1] = 1;
静的初期化
静的初期化では、1ビット配列ごとに異なる長さの要素を割り当てることができます
形式:データ型2次元配列名[] = { {最初の行の要素}、{2番目の行の要素}}
デモンストレーション:
int arr[][] = {
{1},
{2,3,4},
{5,6}
};
System.out.println(arr[0][0]);
System.out.println(arr[2][1]);
アレイ内のメモリ割り当て
Javaプログラムを実行しているときは、メモリにスペースを割り当てる必要があります。計算の効率を上げるために、各エリアには特定のデータ処理方法とメモリ管理方法があるため、スペースは異なるエリアに分割されます。
配列にメモリユニットを割り当てた後、インデックスなしで配列を出力すると、メモリユニット内の配列のアドレスを確認できます。
char型配列の場合、System.out.println()が配列の名前を出力するとき、メモリユニットのアドレスではなく、配列内のすべての要素の値を出力することに注意してください。
char型配列のメモリユニットのアドレスを出力する場合は、配列と文字列を連結する必要があります。
char a[] = {'h','e','l','l','o',' ','w','o','r','l','d'};
System.out.println(""+a);
int配列を例にとると、初期化時にデフォルト値がストレージスペースに追加されます。
- 整数:デフォルト値0
- 浮動小数点数:デフォルト値は0.0です
- ブール値:デフォルト値はfalse
- 文字:デフォルト値ヌル文字
- 参照データ型:デフォルト値はnullです
注意
- スタックメモリに格納されている変数はローカル変数であり、使用すると消えます
- ヒープメモリには、スペースによって追加されたデフォルト値が格納され、すべての新しいものにはアドレス値があります
- 使用後はガベージコレクターによりリサイクルされます
配列内の要素に値を割り当てると、ヒープメモリが変化します
配列がメモリ空間を作成したら、ある配列を別の配列に割り当てます(2つの配列タイプは同じである必要があります)。
複数の配列が同じアドレスを指します。
したがって、配列arr2の要素を変更すると、配列arrの要素も変更されていることがわかります。
2次元配列でのメモリ割り当て
配列の一般的な例外
- インデックスの範囲外:インデックスの範囲外の問題によると、配列に存在しないインデックスに対応する要素へのアクセス
- ヌルポインタ例外:アクセスされた配列がヒープメモリ内のデータを指さなくなり、ヌルポインタ例外になります
配列インデックスが範囲外
ArrayIndexOutOfBoundsException
3つの空間位置のみを作成しましたが、4番目の空間の変数を取得したいとします。
ヌルポインタ例外
NullPointerException
配列のスタックメモリにメモリユニットアドレスがありません。それでもメモリユニットから要素を取得すると、nullポインタエラーが報告されます。
配列の一般的な操作
配列をトラバースします
長さは、配列内の要素の数を取得するために使用されます
forループで、arr.lengthを使用して条件付き判断を行います
int arr[] = {1,2,3,4};
for (int i = 0 ;i<arr.length;i++){
System.out.println(arr[i]);
最大を取得します
int arr[] = {11,2,333,44};
int max = arr[0];
for (int i = 0 ;i<arr.length;i++){
if(arr[i] > max){
max = arr[i];
}
}
System.out.println(max);