CodeZine(コードジン)

特集ページ一覧

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

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

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

Stack(スタック)

 Stackは、Queueと並んで有名な積み上げ型のデータ構造を元にしたコレクションです。Queueとは違い、先に入れたものが後から出てくる構造をしています。Queueが要素の追加や削除にエンキュー、デックという独特の言い回しを使うのと同様、Stackにデータを入れることをプッシュ(Push)、Stackからデータを取り出すことをポップ(Pop)と呼びます。こちらもデータの記憶領域の管理をコレクションに任せられることと、様々な型のデータをまとめて取り扱うことができるという点が便利なところです。

Stackサンプルプログラムの解説

サンプルプログラムの一部抜粋
Stack stk = new Stack();
stk.Push("First Object");
stk.Push(2);
stk.Push(3.1415);

Console.WriteLine("Stack size : {0}", stk.Count);
Console.WriteLine("1st Pop : {0}", stk.Pop());

Console.WriteLine("Stack size : {0}", stk.Count);
Console.WriteLine("2nd Pop : {0}", stk.Pop());

Console.WriteLine("Push.");
stk.Push("新しい値を追加");

Console.WriteLine("Stack size : {0}", stk.Count);
Console.WriteLine("3rd Pop : {0}", stk.Pop());           
サンプルプログラムの実行結果
Stack size : 3
1st Pop : 3.1415
Stack size : 2
2nd Pop : 2
Push.
Stack size : 2
3rd Pop : 新しい値を追加

 特筆して説明する点はありません。先入れ後出し構造であることとメソッド名の違いをのぞけば、その挙動はQueueとほぼ同じです。

Stackの基本的な使い方

  • Push(value)で値を追加
  • Pop()で値を取り出す

 という、Queueとよく似た使い方をします。Queueと同じく、Peekメソッドを使うことで、Stackに積んであるオブジェクトを削除せずに取り出すことが可能です。特定要素へのアクセス方法が提供されていないこと、null参照をPushできること、Stackの要素が底をついた状態でPopするとInvalidOperationException例外を投げることも、Queueと同じです。

Stackを使う上での注意点

 Stack特有の注意点としては、Popメソッドのオーダーにあります。Stackの容量がCountの返す値よりも大きければ、PopはO(1)で動作します。しかし、Countの値がStackの容量よりも大きければ、PopはO(n)で動作します。従って、速度を要求される場面ではあらかじめ十分な大きさのStackを確保した方が良いでしょう。他のコレクション同様、コンストラクタで容量の指定が可能です。

まとめ

 今回はSystem.Collections名前空間に属する便利なコレクションについて紹介しました。いずれも便利で活用の幅の広いデータ構造ばかりですから、様々な用途に活用していただきたいと思います。

参考資料

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

著者プロフィール

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

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

あなたにオススメ

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