Home / 記事 / プログラム言語 / C# / C# のコレクション クラス (1/3) / Queue クラス

e知識「e-chishiki.com」では、インドでの著名なIT著者、IT教育者、eセキュリティーの大家により作成された様々な種類のプログラミング言語に関する技術的なコンテンツを知識情報データーベースとして提供します。

C# プログラミングシリーズ

C# のコレクション クラス (1/3)

Yashavant Kanetkar
Yashavant Kanetkar

インデックス


Queue クラス

Queue クラスはオブジェクトのコレクションであり、オブジェクトが "ファースト イン ファースト アウト" の方式で格納および取得されます。Queue クラスを使用すると、メッセージを受信し、受信日に基づいてメッセージを表示するアプリケーションを開発できます。

次のプログラムでは、Queue クラスを実装する方法を示します。

using System ;
using System.Collections ;
namespace collect
{
    class Class1
    {
        static void Main ( string[ ] args )
        {
            Queue q = new Queue( ) ;
            q.Enqueue ( "Message1" ) ;
            q.Enqueue ( "Message2" ) ;
            q.Enqueue ( "Message3" ) ;
            q.Enqueue ( "Message4" ) ;
            Console.WriteLine ( "First message: {0}", q.Dequeue( ) ) ;
            Console.WriteLine ( "The element at the head is {0}", q.Peek( ) ) ;
            IEnumerator e = q.GetEnumerator( ) ;
            while ( e.MoveNext( ) )
                Console.WriteLine ( e.Current ) ;
        }
    }
}

キューの最後に要素を追加するには、Queue クラスの Enqueue( ) メソッドを使用します。メッセージをいくつかキューに追加しています。Dequeue( ) メソッドは、キューの先頭にある要素を返して、その要素を削除します。先頭の要素を取得しても、キューからその要素を削除したくない場合は、Peek( ) メソッドを使用します。ArrayList クラスや BitArray クラスとは異なり、Queue クラスにはインデクサがありません。したがって、[ ] 演算子を使用してキューの要素にアクセスすることはできません。キューの要素にアクセスするために、Collections 名前空間に用意されている IEnumerator という名前のインターフェイスを使用します。Queue クラスは、このインターフェイスを実装しています。Queue クラスの GetEnumerator( ) メソッドを使用して、IEnumerator の参照 e を取得します。この参照を使用して、キューの反復処理を行っています。IEnumerator インターフェイスの Current プロパティは、現在位置の要素を返します。参照 e は、コレクションの反復処理にのみ使用でき、コレクションの変更には使用できません。Collections 名前空間の ArrayListBitArray などの他のクラスも、IEnumerator インターフェイスを実装しています。したがって、これらの配列も IEnumerator インターフェイスを使用して列挙できます。

キューに特定の要素が存在するかどうかを調べるには、次に示すように Contains( ) メソッドを使用します。

bool b = q.Contains ( "Message3" ) ;
Console.WriteLine ( b ) ;

Contains( ) メソッドは、要素 "Message3" がキューに存在する場合は true を返し、存在しない場合は false を返します。

Queue オブジェクトは、スレッドセーフではありません。つまり、2 つの異なるスレッドが 1 つの Queue オブジェクトに同時にアクセスできるので、問題が発生する可能性があります。このような状況を防ぐため、Queue クラスには static メソッドの Synchronized( ) が用意されています。このメソッドは、指定したオブジェクトを囲む同期化されたラッパーを返します。次のステートメントでは、Synchronized( ) メソッドの使用方法を示します。

Queue q = new Queue( ) ;
Queue sq = Queue.Synchronized ( q ) ;

このようにすることで、安全に sq を使用して、キューに対するさまざまな操作を実行できます。

コメント

コメントするにはログイン、もしくはユーザ登録を行ってください。

発売中

LET US C(上)
インド人ITエンジニアのCプログラミングのバイブル。通算100万冊以上売れています。
― 2,520円 ―

Y. Kanetkar

発売中

Introduction to Object Oriented Programming & C++
C++を例に、多彩なサンプルコードと簡潔な説明でOOPプログラミングの実際が理解できる。
2,940

Y. Kanetkar

発売中

Microsoft .NET Web Application Security
APプログラムの作り方で不正侵入の防御率を向上させる手法を解説。今までにないセキュリティーの手法を紹介します。
3,990円

Vijay Mukhi

2008年の11月発売予定

Quest C++ ビジュアルラーニングコース
これがあれば、見て聞くだけで楽しみながらプログラミングテクニックが身につきます。
― 9,975円 ―

Y. Kanetkar Asang Dani

2008年の11月発売予定

Programmer's Guide to Web Application Security
Web System への侵入方法と原理を解説する事により、防止方法を理解することが出来る。
3,990

Vijay Mukhi

フォーラムの最新ポスト