CodeZine(コードジン)

特集ページ一覧

.NET Frameworkの代表的なコレクションと使い方

System.Collections名前空間直下の主なコレクション

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/03/23 14:00

 最近話題にあがるGenrics(総称型)を用いたコレクションと違い、System.Collections名前空間直下のコレクションは、サポートされているフレームワークの幅が広く、柔軟に活用できる点が特徴です。そこで本稿では、.NET Frameworkで利用できるSystem.Collection名前空間に属している代表的な各種データ構造について、例を交えて紹介したいと思います。

目次

はじめに

 プログラムを作っていると、必ずといっていいほど効率的なデータの取り扱い方について考えさせられます。例えば電卓プログラムであれば木構造を使って必要なデータを保持するのが良い、電話帳のようなプログラムならばデータをリストとして保持すると良い、などと言われます。

 一般にデータ構造と呼ばれるこれらのうち、単純なものはプログラムを作るたびに自前で実装したり、自分自身で使いやすいライブラリを構築したりしてもよいでしょう。しかし、ハッシュや辞書、動的に大きさの変わる配列といった実装が少し面倒なものについては、既存のライブラリがあればそれを利用したいと考えるのが人の常だと思います。

 幸い、JavaやC#といったモダンな言語では、これらのデータ構造は標準ライブラリを通じ、コレクションと呼ばれる機能の一部として提供されており、手軽に使える状態が整っています。

 そこで本稿では、.NET Frameworkで利用できるSystem.Collection名前空間に属している代表的な各種データ構造について、例を交えながら紹介したいと思います。

対象読者

  • .NET Frameworkのコレクションについて知りたいという方

 なお、サンプルプログラムはC#を使って書いていますが、VB.NETなど、他の.NET系言語でも同じ機能を利用することが可能です。また、すべてのサンプルプログラムはVisual Studio 2008 Professional Editionで、ターゲットフレームワークを.NET Framework 2.0にした上で動作確認を行っています。

System.Collections名前空間

 .NET Frameworkで利用できるコレクション機能は、すべてSystem.Collections名前空間以下に整備されています。Collections名前空間の下にはさらにGenerics名前空間とObjectModel名前空間、さらにSpecialized名前空間が区切られており、それぞれ総称型を利用できるコレクション、オブジェクトモデルに基づいた再利用可能なコレクション、厳密に型指定された特殊なコレクションが納められています。

 ですが、本稿で相手にするのはCollections名前空間直下に納められているコレクションです。その中でも特に、表1に挙げたものについて紹介したいと思います。

表1:今回紹介するクラス
クラス名 概略
ArrayList 動的配列リストを提供
BitArray ビット配列を提供
Hashtable 柔軟なハッシュテーブルを提供
SortedList 特定のキーによってソートされるリストを提供
Queue 待ち行列型データ構造を提供
Stack 積み上げ型データ構造を提供

 最近話題にあがることが多いGenerics(総称型)を使ったコレクションではなく、Collections直下の機能を使う最大の利点は、サポートされているフレームワークの幅が広いという点にあります。

 なお、記事中で実行結果を紹介しているプログラムのソースコードは、記事添付のサンプルプログラムに収められていますので、詳しくはそちらをご参照ください。

本稿で紹介するコレクションを使う上での注意点

 コレクションは非常に便利なのでついつい何にでも使ってしまいがちですが、注意しなければいけない点もあります。

 何より注意しなければいけないのは、多くのコレクションは格納されているデータについて、そのデータの型情報を事前に知ることができないという点です。つまり、正しく用いるためにはコレクションから取り出したデータの型を調べ、適切な型のオブジェクトであるかを判断しながら処理を進めていかなければなりません。

 また、型が決定されていないので処理速度は比較的遅めです。幅広いフレームワークで使えることを捨て、速度を重視したいのであれば、Generics名前空間以下のクラスライブラリ利用すると良いでしょう。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 太田 晃(オオタ アキラ)

     ブログ(http://repse.blogspot.com/)では、coLinux上にMinGWを用いてクロスコンパイル環境を構築し、そのうえでSDLやOpenGLを使ってWindows向けのプログラムを書くとか、海外のソフトウェアを(勝手に)日本語化するとか、Windowsのインデック...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5