配列は、すべてのプログラミング言語にとって重要なデータ構造の 1 つです。もちろん、言語が異なれば配列の実装や処理方法も異なります。
Java 言語で提供される配列は、同じ型の固定サイズの要素を格納するために使用されます。
100 個の独立変数 (number0、number1、...、number99) を直接宣言する代わりに、numbers[100] などの配列変数を宣言できます。
このチュートリアルでは、Java 配列の宣言、作成、初期化について紹介し、対応するコードを示します。
プログラムで配列を使用するには、まず配列変数を宣言する必要があります。配列変数を宣言するための構文は次のとおりです。
dataType[]arrayRefVar;//首选的方法或dataTypearrayRefVar[];//效果相同,但不是首选方法
注:配列変数を宣言するには、dataType[] arrayRefVar 宣言スタイルを使用することをお勧めします。 dataType arrayRefVar[] スタイルは C/C++ 言語に由来しており、C/C++ プログラマーが Java 言語をすぐに理解できるように Java で採用されています。
両方の構文のコード例を次に示します。
double[]myList;//首选的方法或doublemyList[];//效果相同,但不是首选方法
Java 言語は new 演算子を使用して配列を作成します。構文は次のとおりです。
arrayRefVar=newdataType[arraySize];
上記の構文ステートメントは次の 2 つのことを行います。
1. dataType[arraySize]を使用して配列を作成します。
2. 新しく作成した配列の参照を変数 arrayRefVar に割り当てます。
以下に示すように、配列変数の宣言と配列の作成は 1 つのステートメントで完了できます。
dataType[]arrayRefVar=newdataType[arraySize];
さらに、次の方法を使用して配列を作成することもできます。
dataType[]arrayRefVar={value0,value1,...,valuek};
配列の要素にはインデックスによってアクセスします。配列のインデックス付けは 0 から始まるため、インデックス値の範囲は 0 から arrayRefVar.length-1 までです。
その後、配列に空き領域ができたら、次の方法で操作できます。
例: int 配列を定義する
public class ArrayDemo { public static void main(String args[]) { int data[] = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 10; // 第一个元素 data[1] = 20; // 第二个元素 data[2] = 30; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 } } }
スペースの宣言と割り当てに加えて、配列自体には別の割り当てモードがあります。
例: ステップバイステップ モードを使用して配列スペースを空ける
public class ArrayDemo { public static void main(String args[]) { int data[] = null; data = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 10; // 第一个元素 data[1] = 20; // 第二个元素 data[2] = 30; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 } } }
ただし、配列は参照データ型であるため、配列を使用する前に領域を割り当てる (インスタンス化する) 必要があることに注意してください。領域が割り当てられていない配列を使用すると、必ずNullPointerException
メッセージが表示されます。
public class ArrayDemo { public static void main(String args[]) { int data[] = null; System.out.println(data[x]); } }
この原理は以前に説明したものとまったく同じです。
開発中に配列が使用されることは間違いありませんが、上記のような操作はまれです。今後の実際の開発では、配列の概念がより使用されることになりますが、直接使用すると、ほとんどの場合、単なる for ループの出力になります。
配列の要素の型と配列のサイズは決まっているため、配列の要素を処理するときは通常、基本ループまたは foreach ループを使用します。
この例では、配列を作成、初期化、操作する方法を完全に示します。
publicclassTestArray{ publicstaticvoidmain(String[]args){ double[]myList={1.9,2.9,3.4,3.5}; //打印所有数组元素for(inti=0;i<myList.length;i++){ System.out.println(myList[i]+""); } //计算所有元素的总和doubletotal=0; for(inti=0;i<myList.length;i++){ total+=myList[i]; } System.out.println("Totalis"+total); //查找最大元素doublemax=myList[0]; for(inti=1;i<myList.length;i++){ if(myList[i]>max)max=myList[i]; } System.out.println("Maxis"+max); } }
上記の例のコンパイルと実行結果は次のとおりです。
1.9 2.9 3.4 3.5 Totalis11.7 Maxis3.5
JDK 1.5 では、添字を使用せずに配列を反復する、foreach ループまたは拡張ループと呼ばれる新しいタイプのループが導入されました。
構文形式は次のとおりです。
for(type element: array){ System.out.println(element); }
この例は、配列 myList 内のすべての要素を表示するために使用されます。
publicclassTestArray{ publicstaticvoidmain(String[]args){ double[]myList={1.9,2.9,3.4,3.5}; //打印所有数组元素for(doubleelement:myList){ System.out.println(element); } } }
上記の例のコンパイルと実行結果は次のとおりです。
1.9 2.9 3.4 3.5
配列はパラメータとしてメソッドに渡すことができます。たとえば、次の例は int 配列の要素を出力するメソッドです。
publicstaticvoidprintArray(int[]array){ for(inti=0;i<array.length;i++){ System.out.print(array[i]+""); } }
次の例では、printArray メソッドを呼び出して、3、1、2、6、4、および 2 を出力します。
printArray(newint[]{3,1,2,6,4,2});
publicstaticint[]reverse(int[]list){ int[]result=newint[list.length]; for(inti=0,j=result.length-1;i<list.length;i++,j--){ result[j]=list[i]; } returnresult; }
上記の例では、結果の配列が関数の戻り値として使用されます。
java.util.Arrays クラスは配列を簡単に操作でき、このクラスが提供するすべてのメソッドは静的です。次の機能があります。
fill メソッドを使用して、配列に値を割り当てます。
配列を並べ替えます。sort メソッドを使用して昇順に並べます。
配列の比較: 配列内の要素の値が等しいかどうかを比較するには、equals メソッドを使用します。
配列要素の検索: binarySearch メソッドは、ソートされた配列に対して二分検索操作を実行できます。
具体的な手順については、以下の表を参照してください。
シリアルナンバー | 方法と指示 |
---|---|
1 | public static int binarySearch(Object[] a, Object key) は、バイナリ検索アルゴリズムを使用して、指定された配列内で指定された値 (Byte、Int、double など) を持つオブジェクトを検索します。配列は呼び出す前にソートする必要があります。ルックアップ値が配列に含まれている場合は、検索キーのインデックスを返し、そうでない場合は (-(挿入ポイント) - 1) を返します。 |
2 | public static booleanquals(long[] a, long[] a2)指定された 2 つの long 配列が互いに等しい場合、true を返します。 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 など) にも機能します。 |