C#集合(Collection)
阿新 • • 發佈:2018-12-26
集合
集合類是專門用於處理資料儲存和檢索的類。這些類提供了對棧(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
}
}
}