e知識「e-chishiki.com」では、インドでの著名なIT著者、IT教育者、eセキュリティーの大家により作成された様々な種類のプログラミング言語に関する技術的なコンテンツを知識情報データーベースとして提供します。
C# プログラミングシリーズ
C# のコレクション クラス (1/3)
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 名前空間の ArrayList や BitArray などの他のクラスも、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 を使用して、キューに対するさまざまな操作を実行できます。



