Java Collection の Vector は内部でどのように機能し、任意のタイプのオブジェクトを受け入れることができますか?
4 に答える
内部的には、Vector はオブジェクトを Object 型として格納しただけです。すべてのオブジェクトは Object から継承されるため、すべてのオブジェクトを格納できます。
ただし、int や double などのプリミティブ値は、オブジェクトではないため、Object から継承されません。それらに対処するために、Java は必要に応じてそれらをプリミティブ値からオンザフライでオブジェクトに変換します。したがって、int 5 は 5 を保持する Integer オブジェクトに変換され、double 4.3 は 4.3 を保持する Double オブジェクトに変換されます。これは、オートボクシングとして知られています。
Java は逆の処理も行い、Integer から int に自動的に変換します。これは「アンボクシング」として知られています。
そのため、任意のオブジェクトを格納できますが、Vector を使用してコーディングすると、より具体的にすることができます。たとえば、ベクターまたはベクター。ベクター内に保存できるものに対するこの制限は、「ジェネリック」を使用して達成されます。これにより、タイプをパラメーターとしてクラスに渡すことができます。これらの例では、パラメーターは String および Integer です。
ただし、ジェネリックはコンパイル時にのみ適用されます。実行時に、Vector は Object を内部的に使用し続けます。
これが意味することは、アプリケーションが実行されているとき、Vector と Vector の間に違いはないということです。それらはまったく同じであり、実際には Vector しかありません (Vector または Vector は実際には存在しません)。それらの違いは完全に、アプリケーションが実行される前のコンパイル時です。Vector では、String オブジェクトのみを格納した場合にのみコンパイルされます。
Java などのオブジェクト指向言語の重要な概念であり、オブジェクト指向プログラミングの 4 つの柱の1 つであるポリモーフィズムによって機能します。
Vector はObjectのコレクション型であり、Java のすべてのクラスは Object から継承されるため、Vector は任意の型のオブジェクトを受け入れることができます。
Vector は List と同じように機能します。Vector の唯一の異なる it メソッドは同期化されますが、List の場合、同期化はプログラマーの責任です。