{"id":1915,"date":"2024-06-16T20:49:30","date_gmt":"2024-06-16T20:49:30","guid":{"rendered":"https:\/\/www.w3computing.com\/articles\/?p=1915"},"modified":"2024-06-16T20:49:36","modified_gmt":"2024-06-16T20:49:36","slug":"advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively","status":"publish","type":"post","link":"https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/","title":{"rendered":"Advanced C# Collections: Utilizing Hashtables, Stacks, and Queues Effectively"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">C# is a powerful programming language that provides a wide array of collections for managing data. Among these collections, Hashtables, Stacks, and Queues stand out due to their unique data structures and functionalities. This tutorial will provide an in-depth look at these advanced C# collections, covering their definitions, uses, and best practices for effective utilization.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Hashtables<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 Introduction to Hashtables<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A Hashtable is a collection that stores key-value pairs in a way that allows for fast retrieval based on the key. This makes it ideal for situations where you need to look up values frequently.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> System;\n<span class=\"hljs-keyword\">using<\/span> System.Collections;\n\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">HashtableExample<\/span>\n{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">Main<\/span>(<span class=\"hljs-params\"><\/span>)<\/span>\n    {\n        Hashtable hashtable = <span class=\"hljs-keyword\">new<\/span> Hashtable();\n        hashtable.Add(<span class=\"hljs-string\">\"ID001\"<\/span>, <span class=\"hljs-string\">\"John Doe\"<\/span>);\n        hashtable.Add(<span class=\"hljs-string\">\"ID002\"<\/span>, <span class=\"hljs-string\">\"Jane Smith\"<\/span>);\n        hashtable.Add(<span class=\"hljs-string\">\"ID003\"<\/span>, <span class=\"hljs-string\">\"Sam Brown\"<\/span>);\n\n        <span class=\"hljs-keyword\">foreach<\/span> (DictionaryEntry entry <span class=\"hljs-keyword\">in<\/span> hashtable)\n        {\n            Console.WriteLine(<span class=\"hljs-string\">$\"<span class=\"hljs-subst\">{entry.Key}<\/span>: <span class=\"hljs-subst\">{entry.Value}<\/span>\"<\/span>);\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">1.2 Adding and Removing Elements<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Elements in a Hashtable are added using the <code>Add<\/code> method and removed using the <code>Remove<\/code> method.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">hashtable.Add(<span class=\"hljs-string\">\"ID004\"<\/span>, <span class=\"hljs-string\">\"Alice White\"<\/span>);\nhashtable.Remove(<span class=\"hljs-string\">\"ID002\"<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">1.3 Accessing Elements<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Elements can be accessed using their key.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-keyword\">value<\/span> = (<span class=\"hljs-keyword\">string<\/span>)hashtable&#91;<span class=\"hljs-string\">\"ID001\"<\/span>];\nConsole.WriteLine(<span class=\"hljs-keyword\">value<\/span>);  <span class=\"hljs-comment\">\/\/ Output: John Doe<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">1.4 Handling Collisions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Collisions occur when two keys hash to the same index. The Hashtable manages collisions using chaining, where each bucket points to a list of entries that have the same hash.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.5 Performance Considerations<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Hashtables offer average-time complexity of O(1) for lookups, insertions, and deletions. However, performance can degrade if there are too many collisions, making it essential to manage load factors and resize the Hashtable when necessary.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Stacks<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 Introduction to Stacks<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A Stack is a collection that follows the Last-In-First-Out (LIFO) principle. It is used when you need to manage elements in a way where the most recently added element is the first to be removed.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> System;\n<span class=\"hljs-keyword\">using<\/span> System.Collections.Generic;\n\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">StackExample<\/span>\n{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">Main<\/span>(<span class=\"hljs-params\"><\/span>)<\/span>\n    {\n        Stack&lt;<span class=\"hljs-keyword\">int<\/span>&gt; stack = <span class=\"hljs-keyword\">new<\/span> Stack&lt;<span class=\"hljs-keyword\">int<\/span>&gt;();\n        stack.Push(<span class=\"hljs-number\">1<\/span>);\n        stack.Push(<span class=\"hljs-number\">2<\/span>);\n        stack.Push(<span class=\"hljs-number\">3<\/span>);\n\n        <span class=\"hljs-keyword\">while<\/span> (stack.Count &gt; <span class=\"hljs-number\">0<\/span>)\n        {\n            Console.WriteLine(stack.Pop());\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">2.2 Basic Operations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Push<\/code>: Adds an element to the top of the stack.<\/li>\n\n\n\n<li><code>Pop<\/code>: Removes and returns the element at the top of the stack.<\/li>\n\n\n\n<li><code>Peek<\/code>: Returns the element at the top of the stack without removing it.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">stack.Push(<span class=\"hljs-number\">4<\/span>);\n<span class=\"hljs-keyword\">int<\/span> top = stack.Peek();\nConsole.WriteLine(top);  <span class=\"hljs-comment\">\/\/ Output: 4<\/span>\n<span class=\"hljs-keyword\">int<\/span> popped = stack.Pop();\nConsole.WriteLine(popped);  <span class=\"hljs-comment\">\/\/ Output: 4<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">2.3 Use Cases<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stacks are commonly used for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Undo mechanisms in applications.<\/li>\n\n\n\n<li>Parsing expressions (e.g., balancing parentheses).<\/li>\n\n\n\n<li>Depth-first search algorithms in graphs.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">3. Queues<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 Introduction to Queues<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A Queue is a collection that follows the First-In-First-Out (FIFO) principle. It is used when you need to manage elements in a way where the first added element is the first to be removed.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> System;\n<span class=\"hljs-keyword\">using<\/span> System.Collections.Generic;\n\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">QueueExample<\/span>\n{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">Main<\/span>(<span class=\"hljs-params\"><\/span>)<\/span>\n    {\n        Queue&lt;<span class=\"hljs-keyword\">string<\/span>&gt; queue = <span class=\"hljs-keyword\">new<\/span> Queue&lt;<span class=\"hljs-keyword\">string<\/span>&gt;();\n        queue.Enqueue(<span class=\"hljs-string\">\"First\"<\/span>);\n        queue.Enqueue(<span class=\"hljs-string\">\"Second\"<\/span>);\n        queue.Enqueue(<span class=\"hljs-string\">\"Third\"<\/span>);\n\n        <span class=\"hljs-keyword\">while<\/span> (queue.Count &gt; <span class=\"hljs-number\">0<\/span>)\n        {\n            Console.WriteLine(queue.Dequeue());\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">3.2 Basic Operations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Enqueue<\/code>: Adds an element to the end of the queue.<\/li>\n\n\n\n<li><code>Dequeue<\/code>: Removes and returns the element at the front of the queue.<\/li>\n\n\n\n<li><code>Peek<\/code>: Returns the element at the front of the queue without removing it.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">queue.Enqueue(<span class=\"hljs-string\">\"Fourth\"<\/span>);\n<span class=\"hljs-keyword\">string<\/span> front = queue.Peek();\nConsole.WriteLine(front);  <span class=\"hljs-comment\">\/\/ Output: Fourth<\/span>\n<span class=\"hljs-keyword\">string<\/span> dequeued = queue.Dequeue();\nConsole.WriteLine(dequeued);  <span class=\"hljs-comment\">\/\/ Output: Fourth<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">3.3 Use Cases<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Queues are commonly used for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Order processing systems.<\/li>\n\n\n\n<li>Managing tasks in a multi-threaded environment.<\/li>\n\n\n\n<li>Breadth-first search algorithms in graphs.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">4. Best Practices for Using Hashtables, Stacks, and Queues<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 Choosing the Right Collection<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use Hashtables when you need fast lookups and the data can be represented as key-value pairs.<\/li>\n\n\n\n<li>Use Stacks for LIFO-based processing, such as parsing expressions or implementing undo functionalities.<\/li>\n\n\n\n<li>Use Queues for FIFO-based processing, such as task scheduling or order processing.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4.2 Managing Capacity<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For Hashtables:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Monitor the load factor and resize the Hashtable when the load factor exceeds a certain threshold.<\/li>\n\n\n\n<li>Use prime number sizes for the Hashtable capacity to reduce the likelihood of collisions.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For Stacks and Queues:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Consider the initial capacity and growth factor if the size of the collection is expected to grow significantly.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4.3 Thread Safety<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For multi-threaded applications, use concurrent collections like <code>ConcurrentDictionary<\/code>, <code>ConcurrentStack<\/code>, and <code>ConcurrentQueue<\/code>.<\/li>\n\n\n\n<li>Alternatively, use synchronization mechanisms like locks to ensure thread safety.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">5. Advanced Techniques<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 Custom Hash Functions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Implementing custom hash functions can help reduce collisions in a Hashtable.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CustomHashTable<\/span>\n{\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-keyword\">int<\/span> SIZE = <span class=\"hljs-number\">100<\/span>;\n    <span class=\"hljs-keyword\">private<\/span> LinkedList&lt;KeyValuePair&lt;<span class=\"hljs-keyword\">string<\/span>, <span class=\"hljs-keyword\">string<\/span>&gt;&gt;&#91;] buckets = <span class=\"hljs-keyword\">new<\/span> LinkedList&lt;KeyValuePair&lt;<span class=\"hljs-keyword\">string<\/span>, <span class=\"hljs-keyword\">string<\/span>&gt;&gt;&#91;SIZE];\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-title\">GetHash<\/span>(<span class=\"hljs-params\"><span class=\"hljs-keyword\">string<\/span> key<\/span>)<\/span>\n    {\n        <span class=\"hljs-keyword\">int<\/span> hash = <span class=\"hljs-number\">0<\/span>;\n        <span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">char<\/span> c <span class=\"hljs-keyword\">in<\/span> key)\n        {\n            hash = (hash * <span class=\"hljs-number\">31<\/span> + c) % SIZE;\n        }\n        <span class=\"hljs-keyword\">return<\/span> hash;\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">Add<\/span>(<span class=\"hljs-params\"><span class=\"hljs-keyword\">string<\/span> key, <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-keyword\">value<\/span><\/span>)<\/span>\n    {\n        <span class=\"hljs-keyword\">int<\/span> index = GetHash(key);\n        <span class=\"hljs-keyword\">if<\/span> (buckets&#91;index] == <span class=\"hljs-literal\">null<\/span>)\n        {\n            buckets&#91;index] = <span class=\"hljs-keyword\">new<\/span> LinkedList&lt;KeyValuePair&lt;<span class=\"hljs-keyword\">string<\/span>, <span class=\"hljs-keyword\">string<\/span>&gt;&gt;();\n        }\n        buckets&#91;index].AddLast(<span class=\"hljs-keyword\">new<\/span> KeyValuePair&lt;<span class=\"hljs-keyword\">string<\/span>, <span class=\"hljs-keyword\">string<\/span>&gt;(key, <span class=\"hljs-keyword\">value<\/span>));\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-title\">Get<\/span>(<span class=\"hljs-params\"><span class=\"hljs-keyword\">string<\/span> key<\/span>)<\/span>\n    {\n        <span class=\"hljs-keyword\">int<\/span> index = GetHash(key);\n        <span class=\"hljs-keyword\">if<\/span> (buckets&#91;index] != <span class=\"hljs-literal\">null<\/span>)\n        {\n            <span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> pair <span class=\"hljs-keyword\">in<\/span> buckets&#91;index])\n            {\n                <span class=\"hljs-keyword\">if<\/span> (pair.Key == key)\n                {\n                    <span class=\"hljs-keyword\">return<\/span> pair.Value;\n                }\n            }\n        }\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">null<\/span>;\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">5.2 Implementing Custom Stacks and Queues<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You can create custom implementations of stacks and queues to meet specific requirements, such as adding extra functionality or optimizing performance.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Custom Stack Example<\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CustomStack<\/span>&lt;<span class=\"hljs-title\">T<\/span>&gt;\n{\n    <span class=\"hljs-keyword\">private<\/span> LinkedList&lt;T&gt; list = <span class=\"hljs-keyword\">new<\/span> LinkedList&lt;T&gt;();\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">Push<\/span>(<span class=\"hljs-params\">T item<\/span>)<\/span>\n    {\n        list.AddLast(item);\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> T <span class=\"hljs-title\">Pop<\/span>(<span class=\"hljs-params\"><\/span>)<\/span>\n    {\n        <span class=\"hljs-keyword\">if<\/span> (list.Count == <span class=\"hljs-number\">0<\/span>)\n        {\n            <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> InvalidOperationException(<span class=\"hljs-string\">\"Stack is empty.\"<\/span>);\n        }\n        T <span class=\"hljs-keyword\">value<\/span> = list.Last.Value;\n        list.RemoveLast();\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">value<\/span>;\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> T <span class=\"hljs-title\">Peek<\/span>(<span class=\"hljs-params\"><\/span>)<\/span>\n    {\n        <span class=\"hljs-keyword\">if<\/span> (list.Count == <span class=\"hljs-number\">0<\/span>)\n        {\n            <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> InvalidOperationException(<span class=\"hljs-string\">\"Stack is empty.\"<\/span>);\n        }\n        <span class=\"hljs-keyword\">return<\/span> list.Last.Value;\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Count\n    {\n        <span class=\"hljs-keyword\">get<\/span> { <span class=\"hljs-keyword\">return<\/span> list.Count; }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Custom Queue Example<\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CustomQueue<\/span>&lt;<span class=\"hljs-title\">T<\/span>&gt;\n{\n    <span class=\"hljs-keyword\">private<\/span> LinkedList&lt;T&gt; list = <span class=\"hljs-keyword\">new<\/span> LinkedList&lt;T&gt;();\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">Enqueue<\/span>(<span class=\"hljs-params\">T item<\/span>)<\/span>\n    {\n        list.AddLast(item);\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> T <span class=\"hljs-title\">Dequeue<\/span>(<span class=\"hljs-params\"><\/span>)<\/span>\n    {\n        <span class=\"hljs-keyword\">if<\/span> (list.Count == <span class=\"hljs-number\">0<\/span>)\n        {\n            <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> InvalidOperationException(<span class=\"hljs-string\">\"Queue is empty.\"<\/span>);\n        }\n        T <span class=\"hljs-keyword\">value<\/span> = list.First.Value;\n        list.RemoveFirst();\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">value<\/span>;\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> T <span class=\"hljs-title\">Peek<\/span>(<span class=\"hljs-params\"><\/span>)<\/span>\n    {\n        <span class=\"hljs-keyword\">if<\/span> (list.Count == <span class=\"hljs-number\">0<\/span>)\n        {\n            <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> InvalidOperationException(<span class=\"hljs-string\">\"Queue is empty.\"<\/span>);\n        }\n        <span class=\"hljs-keyword\">return<\/span> list.First.Value;\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Count\n    {\n        <span class=\"hljs-keyword\">get<\/span> { <span class=\"hljs-keyword\">return<\/span> list.Count; }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Understanding and effectively utilizing advanced C# collections like Hashtables, Stacks, and Queues is crucial for efficient data management in software development. This tutorial has provided an overview of these collections, their basic operations, and advanced techniques to optimize their usage. By applying these principles and best practices, you can enhance the performance and reliability of your applications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">References<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.collections.hashtable\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft Documentation on Hashtable<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.collections.generic.stack-1\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft Documentation on Stack<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.collections.generic.queue-1\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft Documentation on Queue<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>C# is a powerful programming language that provides a wide array of collections for managing data. Among these collections, Hashtables, Stacks, and Queues stand out due to their unique data structures and functionalities. This tutorial will provide an in-depth look at these advanced C# collections, covering their definitions, uses, and best practices for effective utilization. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[8,4],"tags":[],"class_list":["post-1915","post","type-post","status-publish","format-standard","category-csharp","category-programming-languages","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Advanced C# Collections: Utilizing Hashtables, Stacks, and Queues Effectively<\/title>\n<meta name=\"description\" content=\"C# provides a wide array of collections for managing data. Among these collections, Hashtables, Stacks, and Queues stand out due to their\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Advanced C# Collections: Utilizing Hashtables, Stacks, and Queues Effectively\" \/>\n<meta property=\"og:description\" content=\"C# provides a wide array of collections for managing data. Among these collections, Hashtables, Stacks, and Queues stand out due to their\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-06-16T20:49:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-16T20:49:36+00:00\" \/>\n<meta name=\"author\" content=\"w3compadmin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"w3compadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\\\/\"},\"author\":{\"name\":\"w3compadmin\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\"},\"headline\":\"Advanced C# Collections: Utilizing Hashtables, Stacks, and Queues Effectively\",\"datePublished\":\"2024-06-16T20:49:30+00:00\",\"dateModified\":\"2024-06-16T20:49:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\\\/\"},\"wordCount\":634,\"articleSection\":[\"C#\",\"Programming Languages\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\\\/\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\\\/\",\"name\":\"Advanced C# Collections: Utilizing Hashtables, Stacks, and Queues Effectively\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#website\"},\"datePublished\":\"2024-06-16T20:49:30+00:00\",\"dateModified\":\"2024-06-16T20:49:36+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\"},\"description\":\"C# provides a wide array of collections for managing data. Among these collections, Hashtables, Stacks, and Queues stand out due to their\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Articles Home\",\"item\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programming Languages\",\"item\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/programming-languages\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Advanced C# Collections: Utilizing Hashtables, Stacks, and Queues Effectively\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#website\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/\",\"name\":\"Developer Articles Hub\",\"description\":\"\",\"alternateName\":\"Developer Articles\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\",\"name\":\"w3compadmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"contentUrl\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"caption\":\"w3compadmin\"},\"sameAs\":[\"http:\\\/\\\/w3computing.com\\\/articles\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Advanced C# Collections: Utilizing Hashtables, Stacks, and Queues Effectively","description":"C# provides a wide array of collections for managing data. Among these collections, Hashtables, Stacks, and Queues stand out due to their","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/","og_locale":"en_US","og_type":"article","og_title":"Advanced C# Collections: Utilizing Hashtables, Stacks, and Queues Effectively","og_description":"C# provides a wide array of collections for managing data. Among these collections, Hashtables, Stacks, and Queues stand out due to their","og_url":"https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/","article_published_time":"2024-06-16T20:49:30+00:00","article_modified_time":"2024-06-16T20:49:36+00:00","author":"w3compadmin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"w3compadmin","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/#article","isPartOf":{"@id":"https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/"},"author":{"name":"w3compadmin","@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561"},"headline":"Advanced C# Collections: Utilizing Hashtables, Stacks, and Queues Effectively","datePublished":"2024-06-16T20:49:30+00:00","dateModified":"2024-06-16T20:49:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/"},"wordCount":634,"articleSection":["C#","Programming Languages"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/","url":"https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/","name":"Advanced C# Collections: Utilizing Hashtables, Stacks, and Queues Effectively","isPartOf":{"@id":"https:\/\/www.w3computing.com\/articles\/#website"},"datePublished":"2024-06-16T20:49:30+00:00","dateModified":"2024-06-16T20:49:36+00:00","author":{"@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561"},"description":"C# provides a wide array of collections for managing data. Among these collections, Hashtables, Stacks, and Queues stand out due to their","breadcrumb":{"@id":"https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.w3computing.com\/articles\/advanced-csharp-collections-utilizing-hashtables-stacks-queues-effectively\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Articles Home","item":"https:\/\/www.w3computing.com\/articles\/"},{"@type":"ListItem","position":2,"name":"Programming Languages","item":"https:\/\/www.w3computing.com\/articles\/programming-languages\/"},{"@type":"ListItem","position":3,"name":"Advanced C# Collections: Utilizing Hashtables, Stacks, and Queues Effectively"}]},{"@type":"WebSite","@id":"https:\/\/www.w3computing.com\/articles\/#website","url":"https:\/\/www.w3computing.com\/articles\/","name":"Developer Articles Hub","description":"","alternateName":"Developer Articles","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.w3computing.com\/articles\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561","name":"w3compadmin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","url":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","contentUrl":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","caption":"w3compadmin"},"sameAs":["http:\/\/w3computing.com\/articles"]}]}},"featured_image_src":null,"featured_image_src_square":null,"author_info":{"display_name":"w3compadmin","author_link":"https:\/\/www.w3computing.com\/articles\/author\/w3compadmin\/"},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/1915","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/comments?post=1915"}],"version-history":[{"count":2,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/1915\/revisions"}],"predecessor-version":[{"id":1917,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/1915\/revisions\/1917"}],"wp:attachment":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/media?parent=1915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/categories?post=1915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/tags?post=1915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}