コンテナ(抽象データ型)

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピュータサイエンスではコンテナクラスまたはデータ構造[1] [2]であり、そのインスタンスは他のオブジェクトのコレクションです。つまり、特定のアクセスルールに従って整理された方法でオブジェクトを格納します。

コンテナのサイズは、コンテナに含まれるオブジェクト(要素)の数によって異なります。さまざまなコンテナタイプの基盤となる(継承された)実装は、サイズ、複雑さ、言語のタイプが異なる場合がありますが、多くの場合、特定のシナリオに適した実装を柔軟に選択できます。

コンテナデータ構造は、多くの種類のプログラミング言語で一般的に使用されています。

機能とプロパティ

コンテナは、次の3つのプロパティによって特徴付けることができます。

  • アクセス、それはコンテナのオブジェクトにアクセスする方法です。配列の場合、アクセスは配列インデックスを使用して行われます。スタックの場合、アクセスはLIFO(後入れ先出し)の順序に従って行われ、キューの場合、アクセスはFIFO(先入れ先出し)の順序に従って行われます。
  • ストレージ、それはコンテナのオブジェクトを保存する方法です。
  • トラバーサル、つまりコンテナのオブジェクトをトラバースする方法です。

コンテナクラスは、次のことを行うためにCRUDのようなメソッドを実装することが期待されています。

  • 空のコンテナー(コンストラクター)を作成します。
  • オブジェクトをコンテナに挿入します。
  • コンテナからオブジェクトを削除します。
  • コンテナ内のすべてのオブジェクトを削除します(クリア)。
  • コンテナ内のオブジェクトにアクセスします。
  • コンテナ内のオブジェクトの数(カウント)にアクセスします。

コンテナは、イテレータと組み合わせて実装される場合があります

タイプ

コンテナは、単一値コンテナまたは連想コンテナのいずれかに分類できます

単一値コンテナは、各オブジェクトを個別に格納します。オブジェクトには、言語ループ構造( forループなど)またはイテレータを使用して直接アクセスできます

連想コンテナは、キーと値のペアで構成される連想配列、マップ、または辞書を使用するため、各キーはコンテナ内に最大1回表示されます。キーは、値(オブジェクトがコンテナーに格納されている場合)を見つけるために使用されます。連想コンテナは、プログラミング言語でクラステンプレートとして使用されます。

コンテナの抽象データ型には次のものがあります。

これらの抽象型を実装するために使用される一般的なデータ構造には、次のものがあります。

グラフィックコンテナ

ウィジェットツールキットは、ウィンドウパネルなどの他のウィジェットをグループするための特別なウィジェットであるコンテナも使用しますグラフィカルプロパティを除けば、子ウィジェットのリストを保持し、子間でウィジェットを追加、削除、または取得できるため、コンテナクラスと同じタイプの動作があります

静的に型付けされた言語の場合

コンテナの抽象化は、型システムに関係なく、事実上すべてのプログラミング言語で記述できます。[3] :273 ただし、強く型付けされた オブジェクト指向プログラミング言語では、開発者が再利用可能な同種のコンテナーを作成するのはやや複雑になる場合があります。

要素タイプが異なるため、これにより、すべての要素タイプのコンテナのコレクションを作成して保持するという面倒なプロセスが発生します。[3] :274–276 

多くの要素タイプ(整数や浮動小数点など)は、占有するメモリサイズとそのセマンティックな意味のために本質的に相互に互換性がなく、したがって異なるコンテナを必要とします(もちろん、相互に互換性があるか変換可能でない限り)。[3] :274–276 現代のプログラミング言語は、問題の解決に役立つさまざまなアプローチを提供します:[3] :274–281 

ユニバーサルベーシックタイプ
他の人が普遍的に割り当てることができる型(ルートオブジェクトクラスなど)。
ダウンキャスティング;
クラス置換
上記の3つはすべて、弱い型の言語用です。これらは通常、タイプ間の継承とポリモーフィズムを意味します。
共用体型(C / C ++言語)
さまざまなデータサイズのタイプを保存できます。ただし、取得時にどのタイプがユニオンに格納されているかを確認するのは困難であり、注意深く従う必要があります。
型変換
テンプレートまたはジェネリック
再利用性と型安全性を確保します。逆継承と考えることができます。ただし、このアプローチでは、タイプがメソッドで異なることを考えると、時間のかかるプロセスであると言われているテンプレートの特殊化を実装する必要がある場合があります。[3] :281 

も参照してください

参考文献

  1. ^ Paul E. Black(ed。)、Dictionary of Algorithms and DataStructuresのデータ構造のエントリ米国国立標準技術研究所。2004年12月15日。2011年10月4日にアクセス。
  2. ^ ブリタニカ百科事典エントリデータ構造(2009)オンラインエントリ2011年10月4日にアクセス。
  3. ^ a b c d e Budd、ティモシー(1997)。オブジェクト指向プログラミング入門(第2版)。マサチューセッツ州レディング:アディソン-ウェスリー。ISBN 0-201-82419-1OCLC34788238 _

外部リンク