1. 程式人生 > >C#集合(Collection)

C#集合(Collection)

集合

集合類是專門用於處理資料儲存和檢索的類。這些類提供了對棧(stack)、佇列(queue)、列表(list)和雜湊表(hash table)的支援。大多數集合類實現了相同的介面。

1.動態陣列

1)動態陣列和陣列差不多,但對動態陣列進行插入和刪除操作會自動改變陣列的大小

2)ArrayList要需要引入名稱空間System.Collections;預設可存放的元素個數為4,超過了動態陣列會自動擴充套件到到2倍(8),以此類推

using System;
using System.Collections;
using System.Collections.Generic
; using System.Linq; using System.Text; namespace 集合 { class Program { static void Main(string[] args) { ArrayList a = new ArrayList(); a.Add(1); a.Add(2); a.Add(3); Console.WriteLine("***********************************"
); Console.WriteLine("可以存放的元素個數" + a.Capacity+",實際元素個數 "+a.Count); a.Add(4); a.Add(5); Console.WriteLine("***********************************"); Console.WriteLine("可以存放的元素個數" + a.Capacity + ",實際元素個數 " + a.Count); a.Add(1); a.Add
(2); a.Add(3); a.Add(4); Console.WriteLine("***********************************"); Console.WriteLine("可以存放的元素個數" + a.Capacity + ",實際元素個數 " + a.Count); Console.WriteLine("***********************************"); Console.ReadKey(); } } }

這裡寫圖片描述

3)當然也可以指定初始容量,那麼動態陣列的容量將會按照初始容量的倍數擴充

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 集合
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList a = new ArrayList(3);
            a.Add(1);
            a.Add(2);
            a.Add(3);
            Console.WriteLine("***********************************");
            Console.WriteLine("可以存放的元素個數" + a.Capacity+",實際元素個數 "+a.Count);
            a.Add(4);
            Console.WriteLine("***********************************");
            Console.WriteLine("可以存放的元素個數" + a.Capacity + ",實際元素個數 " + a.Count);
            a.Add(1);
            a.Add(2);
            a.Add(3);
            a.Add(4);
            Console.WriteLine("***********************************");
            Console.WriteLine("可以存放的元素個數" + a.Capacity + ",實際元素個數 " + a.Count);
            Console.WriteLine("***********************************");
            Console.ReadKey();

        }
    }
}

這裡寫圖片描述

4)動態陣列也有很多的方法:在某個索引插入元素(Insert),判斷是否存在某個元素(Contains),移除元素(Remove),排序(Sort),逆轉(Reverse)等等

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 集合
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList a = new ArrayList(3);
            a.Add(true);
            a.Add("jack");
            a.Add("kaselin");
            a.Add("janes");
            a.Add("kaselin");
            a.Add(2);
            //Insert(int index ,object value) 
            //在一個位置插入值“melon”
            a.Insert(0, "melon");

            //遍歷陣列元素
            foreach (object i in a) {
                Console.WriteLine("" + i);
            }
            Console.WriteLine("***********************************");
            Console.WriteLine("可以存放的元素個數" + a.Capacity+",實際元素個數 "+a.Count);
            Console.WriteLine("判斷動態陣列是否含有元素melon: " + a.Contains("melon"));
            Console.WriteLine("第一次出現元素kaselin:的位置 " + a.IndexOf("kaselin"));
            Console.WriteLine("***********************************");
            Console.ReadKey();

        }
    }
}

這裡寫圖片描述

2.雜湊表

1)雜湊表由一系列的鍵值對組成,通過鍵來訪問元素

2)例子

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 集合
{
    class Program
    {
        static void Main(string[] args)
        {
          Hashtable ha = new Hashtable();
            ha.Add("姓名","張三");
            ha.Add("性別", "男");
            ha.Add("年齡", 16);

            //獲取雜湊表ha下所有的鍵並輸出值
            ICollection c = ha.Keys;
            foreach(object i in c){
                Console.Write(ha[i]+" ");
            }
            Console.WriteLine(" ");
            Console.WriteLine("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");

            Console.WriteLine("鍵值對的個數是"+ha.Count);
            Console.WriteLine("是否包含鍵【姓名】:" + ha.ContainsKey("姓名")+"是否包含值【李四】:"+ha.ContainsValue("李四"));
            Console.WriteLine("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");

            Console.ReadKey();


        }
    }
}

這裡寫圖片描述

3.排序表

1)排序表相當於陣列和雜湊表雙劍合璧,就是說,既可以通過索引也可以通過鍵來找資料元素

2)把上面的雜湊表替換成排序表依然可以執行

SortedList ha = new SortedList();

4.堆疊(stack)

1)學過資料結構的同學應該對堆疊和佇列有所瞭解。堆疊 代表了後進先出的一個物件集合。玩具槍往子彈夾放子彈就可以看作一個棧堆。每次裝子彈都是往底部推入(Push),每次射子彈也是從頂部彈出(Pop).

2)demo

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 集合
{
    class Program
    {
        static void Main(string[] args)
        {
                    #region 堆疊
            Stack st = new Stack();
            st.Push("H");
            st.Push("E");
            st.Push("L");
            st.Push("L");
            st.Push("O");
            st.Push("A");
            foreach (object i in st) {
                Console.WriteLine(i);
            }
            Console.WriteLine("從頂部移除元素,移除的元素是" + st.Pop());
            Console.WriteLine("返回最頂部元素但不移除,元素是" + st.Peek());
            Console.ReadKey();
            #endregion

        }
    }
}

這裡寫圖片描述

佇列(Queue)

1)佇列是先進先出的物件集合。新增一個元素是從底部新增的,移除元素是從頂部移除的;堆疊新增元素是在底部的,移除元素也是從底部移除。

2)有點暈畫個圖看看。堆疊只有底部是可以移動的,而佇列兩頭都可以移動,佇列相當於在食堂吃飯排隊,先到的先打飯,打完了就走,晚到的就排在對後面。

這裡寫圖片描述

3)demo

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 集合
{
    class Program
    {
        static void Main(string[] args)
        {
                    #region 佇列
            Queue q = new Queue();
            q.Enqueue("A");
            q.Enqueue("B");
            q.Enqueue("C");
            q.Enqueue("D");
            Console.WriteLine("***********************************");
            Console.WriteLine("從佇列新增一個元素是在尾部新增,方法是Enqueue()");

            foreach(object i in q ){
                Console.Write(i+" ");
            } 


            Console.WriteLine();
            Console.WriteLine("從佇列移除一個元素是從頂部移除,方法是Dequeue()");
            Console.WriteLine("移除的元素是"+q.Dequeue());
            Console.WriteLine("***********************************");
            Console.ReadKey();
            #endregion

        }
    }
}

這裡寫圖片描述