ホームページ >Java >&#&チュートリアル >Javaの動的配列の原理は何ですか
1. 配列の基本概念
1. 配列とは何ですか?
おそらく最も一般的に使用されるのは配列です。
これは最も広く使用されているデータ構造です。これは、特定の順序で配置された同じデータ型 (基本型またはカスタム型) の要素のコレクションです。これらはメモリに保存されます。 order. 順番にまとめて保存されます。配列には、1 次元配列、2 次元配列、および多次元配列があります。
一般的な理解では、通常、羊のグループまたは牛のグループを円の中に配置します。この円は配列コンテナーに相当し、各羊は要素に相当します。
上記の概念では、同じデータ型、特定の順序、コレクション、メモリ ストレージという言葉を知っている必要があります。
2. 配列の宣言方法
タイトルからわかるように、配列の宣言と作成は 2 つの異なるプロセスです。ステートメントの効果は、私がシャワーを浴びるつもりだと他の人に伝えるようなものであり、創作の効果は、私が実際にシャワーを浴びるつもりだと他の人に伝えるのと同じです (不適切な比喩 笑)。では、配列を宣言するにはどうすればよいでしょうか?
int[] students ; int students [];
上記から、2 つの方法があることがわかりますが、通常は最初の方法が推奨されます。結局のところ、最初の方が読みやすいようです。
3. 配列の作成方法
配列の宣言方法がわかったら、次のステップは配列の作成方法です。言語ごとに配列の作成方法は異なりますが、基本的には同じです。ここでは Java でのいくつかの方法を紹介します。
//第一种: int [] students = new int[50]; //第二种: String [] colors = {"red","blue","black"};
上記のことから、配列の作成は非常に簡単であることがわかりますが、実際には、これら 3 つの方法を習得する必要がある知識ポイントがたくさんありますので、ご心配なく。実際、配列の作成には配列の初期化と呼ばれるリンクがあります。たとえば、配列を作成しますが、最初は配列コンテナに値が入っていない可能性があります。では、これらの値はいつ存在するようになったのでしょうか?つまり、システムが配列コンテナーに宣言した赤、青などをいつインストールしたのでしょうか?このプロセスは配列の初期化です。配列はどのように初期化されますか?
配列の初期化は静的初期化と動的初期化に分けられます:
静的初期化: 配列はプログラマによって明示的に指定されます。初期化 (initialization). 配列要素の初期値。配列の長さはシステムによって決定されます。上記の配列を作成する 3 つの方法のうち、3 番目は静的初期化です。 2 番目の方法も同じですが、静的初期化の簡略化された方法です。
動的初期化: 動的初期化中に、要素の数を指定する必要があります。動的初期化中、配列要素の数は不明なので、指定する必要があります。上の最初のものはです。
4. 配列の分類
このタイトルを見て疑問が湧いたかもしれませんが、配列には分類があるのでしょうか?同じタイプの配列を分類するには? 要素をまとめます。実際には違います。適切に分類してみましょう:
** 順序付けされているかどうかに応じて: **順序付けされた配列と順序付けされていない配列。
配列を拡張できるかどうかに応じて、静的配列と動的配列があります。
最初に静的配列を見てみましょう: コンパイル中にスタックにメモリを割り当てる配列です。記憶域スペースは実行中に変更できず、実行後にシステムによって自動的に解放されます。
動的配列を見てみましょう: 動的配列は静的配列に対して相対的なものです。静的配列の長さは事前に定義されており、一度サイズを指定するとプログラム全体で変更することはできません。これは、プログラムの必要に応じてサイズを変更できる動的配列には当てはまりません。動的配列のメモリ空間はヒープから割り当てられます (つまり、動的に割り当てられます)。コードを実行することでストレージ領域を割り当てます。これらのステートメントは、プログラムの実行時に割り当てられます。プログラマはメモリを解放する責任があります。
java の動的配列の原理
既存の配列があります:
int [] data = new int[5];
配列は要素を追加できなくなったので、配列の容量の 2 倍である 10 の容量で新しい配列を初期化します。 arr: int [] newData = new int [ 10];
#次に、元の配列のすべての要素を新しい配列に割り当てます。
# 次に、元の配列の参照 arr が新しい配列を指すようにします。
静的配列と動的配列の比較:
静的配列の場合、作成するのが非常に便利で、作成する必要はありません。参照は簡単ですが、作成後にサイズを変更できないのが致命的な弱点です! 動的配列の場合、作成が面倒で、使用後にプログラマが解放する必要があり、そうしないとメモリに深刻な影響を及ぼします。漏れます。ただし、その使用は非常に柔軟であり、プログラムのニーズに応じてサイズを動的に割り当てることができます。
2. 配列の特性
上記の基本的な概念をマスターした後、配列の特性を見てみましょう。配列の特性はその分類にも基づいています。たとえば、順序付けされた配列の特性は間違いなく順序付けされています。データ. 順序なし データを挿入および削除します。したがって、ここで述べた特性はすべてのアレイに共通の特性、つまり一般的な特性です。以前投稿した記事に戻りますが、特性は時間効率とスペース効率に関するものです。
1. 配列の長さは固定されており、その長さを超える場合は、新しい配列を作成し、古い配列の値をそこに渡すことしかできません;
2. ストレージ タイプ配列は単一であり、同じ配列には同じデータ型のデータのみを格納できます。
3. 配列はサブスクリプトを介してのみデータにアクセスできます
3. 配列の使用シナリオ
コンテナに対する配列の最大の利点は効率です。 Java では、配列はオブジェクト参照のシーケンスを格納し、ランダムにアクセスするための最も効率的な方法です。配列は単純な線形シーケンスであるため、要素へのアクセスが非常に高速になります。配列の利点は効率が高いことですが、そのためにはコストが高い その代償は、配列オブジェクトのサイズが固定されていることです。これにより、配列は仕事では実用的ではなくなります。配列ではなく Java のコンテナーを使用することをお勧めします。
4. 配列の基礎となる実装
ここでの基礎となる実装は、Java 言語とも比較されます。たとえば、今後の記事では、リンク リストなどのデータについても説明します。 Java のリンク リストによって実装されるコンテナと組み合わせた構造についても説明します。
Java は、ArrayList や HashMap などの優れたコレクション API とコレクション クラスを提供します。これらはすべて内部的に配列に基づいています。 Java プログラムが無効な配列インデックスにアクセスしようとすると、jvm は ArrayIndexOutOfBoundException をスローします。
Java 言語における配列の実装原理は何ですか?
この質問はコンパイルの原理に関わるものですが、これはコンパイルの仕様であるとしか言えません。仕様では、たとえば: int[] の int は、これが整数データであることをコンピュータに伝え、[] は、これが連続ストレージ用のメモリ アドレス空間であることをコンピュータに伝えます。データは配列であり、配列は単なる名前です!!配列は Java の特別な型であり、通常の「クラスのインスタンス」オブジェクトとは異なります。
HotSpot VM を例にとると、その答えは、配列オブジェクトのオブジェクト ヘッダーに配列の長さを記録する長さフィールドがあるということです。 arraylength バイトコードの実装では、_length フィールドを読み取るだけで済みます。 JVM の配列オブジェクトは特別なオブジェクトです。そのオブジェクト ヘッダーには、配列の長さを格納するための通常のオブジェクトより 1 ワード多くあります。長さは、このフィールドを読み取るために対応するバイトコードにコンパイルされます。
以上がJavaの動的配列の原理は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。