コンピュータプログラミングにおいて、コンテナ: container)とはオブジェクトの集まりを表現するデータ構造抽象データ型またはクラスの総称である。コレクション: collection)とも言う。コンテナには複数の種類があり、それぞれ独自の方法でオブジェクトを組織的に格納する。

よく知られたものには、

などがある。

同じ分類のコンテナであっても、実装形態の違いから、各種操作の計算量(計算時間)やメモリ上に占める空間的特性などが異なるものがある。例えばリストには主に動的配列によるリストと連結リストがあり、それぞれ場面によって向き不向きがある。

コンテナクラスは一般的に以下のような操作を実装している。

  • 新しい空のコンテナを作成する
  • 格納しているオブジェクト(要素)の数を得る
  • すべての要素を取り除く(空にする)
  • 新しい要素を格納する
  • 特定の要素を取り除く
  • 格納している要素へのアクセス手段を提供する

ジェネリックプログラミングをサポートする言語や、動的型付き言語では、一般的にコンテナの要素にはどのようなデータ型のオブジェクトも取ることができるが、言語によっては要素の型が満たすべき要件が制約として課されていることもある[1]。この要件を満たせば、他のコンテナ型を要素に取るコンテナを定義することもできる。またコンテナのサイズは要素数に合わせて自動的に変化する。

コンテナがオブジェクトを格納する方法には2種類ある。によるものと参照によるものである。

値によるコンテナ
オブジェクトのコピーを格納する。要素へのアクセスはそのコピーを返す。あるオブジェクトをコンテナに格納した(このときコピーされる)後で外部で変更を加えても、コンテナの中身には影響しない。
参照によるコンテナ
オブジェクトへの参照やポインタのみを格納する。要素へのアクセスはその参照を返す。あるオブジェクトをコンテナに格納した後で外部で変更を加えると、コンテナの中身(その要素)が変更される。弱い参照によってガベージコレクションを考慮するものもある。

Javaのコレクション・フレームワークやC++STLなどで、多くの汎用コンテナが実装されている。なお、Javaの場合はジェネリクスは型消去によって実現されている[2]ことから、型パラメータにintのようなプリミティブ型を指定することはできず[3]java.lang.Objectから派生する参照型のみが許可される。そのため配列以外の汎用コレクションにプリミティブ型を直接格納することはできず、必ずjava.lang.Integerのようなプリミティブラッパークラスを使う必要がある。.NETのジェネリクスではこの点が改善されており、汎用コレクションの要素に値型・参照型を問わず任意の型を指定できる。

脚注

編集

関連項目

編集

📚 Artikel Terkait di Wikipedia

JavaScript

JavaScript(ジャバスクリプト)は、プログラミング言語であり、HyperText Markup Language(HTML)やCascading Style Sheets(CSS)と並ぶ World Wide Web(WWW)の中核技術の一つである。Java

Kotlin

はKotlin/Nativeをサポートしている。 オブジェクト指向 Java仮想マシン [脚注の使い方] ^ “Release Kotlin 2.4.0” (2026年6月3日). 2026年6月15日閲覧。 ^ “Generics: in, out, where - Kotlin Programming

ジェネリックプログラミング

えることによって生成されるクラス型は、Tについて実際に指定した具象型のリストとして扱われる。これらの「T型のコンテナ」を一般にジェネリクス (generics) と呼び、ジェネリックプログラミングの代表的なテクニックである。プログラミング言語によって制約は様々だが、このテクニックは、継承関係やシグネチャといった制約条件

C Sharp

Framework 2.0の機能である。クラス、構造体、インタフェース、デリゲート、メソッドに対して適用することができる。 .NETのGenericsはC++のテンプレート、あるいはJavaにおけるそれとも異なるもので、コンパイルによってではなく実行時にランタイムによって特殊化される。これによって異なる言語間の

TypeScript

(Node.js) で実行されるJavaScriptアプリケーションの開発に利用できる。 TypeScriptは大規模なアプリケーションの開発のために設計されている。 TypeScriptはJavaScriptのスーパーセットであるため、既存のJavaScriptプログラムは、全て有効なTypeScriptプログラムとなる。

プリミティブラッパークラス

Vを持つことができる。 (関連項目 "Java Generics" Javaにおける型パラメータの説明。) オブジェクト型がプリミティブ型でない場合でも、オブジェクトの参照はプリミティブ型であることに注意すること。 java.lang java.lang.reflect Java Javaの文法

GNU Lesser General Public License

“PlayOgg!”. Free Software Foundation (2011年1月4日). 2011年4月3日閲覧。 ^ generics ^ たとえばGNU/Linuxなどでは標準的なC言語のソースコードをコンパイルすると、LGPLであるglibcにリンクされる。このときコンパ

ダック・タイピング

ダック・タイピング(英: duck typing)とは、Smalltalk、Perl、PHP、Python、Ruby、JavaScriptなどの動的型付けに対応したオブジェクト指向プログラミング言語に特徴的な、型付けのスタイル(作法)のひとつである。ダック・タイピングはポリモーフィズム(多態性)を実現する手段のひとつとして使われる。