SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

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

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

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名前空間に属する便利なコレクションについて紹介しました。いずれも便利で活用の幅の広いデータ構造ばかりですから、様々な用途に活用していただきたいと思います。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

太田 晃(オオタ アキラ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3640 2009/03/23 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー