9yue6
集合(Collection
一、集合的作用:
有兩種方式可以將對象分組:
1、創(chuàng)建對象數組 ?2、創(chuàng)建對象集合
數組的初始化必須要固定數量,即數組的長度。
集合提供一種靈活的處理方法。與數組不同,處理的對象
組可根據程序更改的需要動態(tài)地增長和收縮。 對于某些集
合,您可以為放入該集合的任何對象分配一個“鍵”,以
便使用該鍵快速檢索對象。
注:集合是類,因此必須聲明新集合后,才能向該集合中
添加元素。
1、創(chuàng)建對象數組
集合分為兩種類型:非泛型集合和泛型集合。
使用非泛型集合的 需引入:System.Collections命名空間。
使用泛型集合需引入:System.Collections.Generic命名空間
(非泛型相比泛型效率較低因為要進行裝箱拆箱操作
Stack
定義:
Stack stack = new Stack();
Stack<int> stackInt = new Stack();
可以重寫堆棧
publicclass MyStack:Stack{
override
}
Stack類成員介紹
Push()將對象插入Stack的頂部(入棧)推入元素
Pop()移除并返回Stack頂部的對象(出棧)彈出元素
Peek()返回位于Stack頂部的對象,但不移除
Contains確定某元素是夠在Stack中
Clear()從Stack中移除所有對象
Count獲取Stack中包含的元素
入棧Push
stack.Push();
出棧Pop
intnumber = (int)stack.Pop();
objectobj = stack.Pop ();
Console.WriteLine();
獲取棧頂元素Peek
objectobj_1 = stack.Pop();//區(qū)別
Console.WriteLine(obj_1);
objectobj_2 = stack.Peek ();
Console.WriteLine(obj_2);
是否包含某個元素
stack.Contains("1");
轉為數組
object[]objs =stack.ToArray();
獲取棧的長度
intcount =stack.Count;
for(int i = 0; i < count; i++) {
stack.Pop();
}
隊列Queue
Queue成員
同樣也實現了ICollection和IEnumerable
Enqueue()將對象添加到Queue的結尾處
Dequeue()移除并返回Queue開始處的對象
其他和Stack沒有區(qū)別
Queue總結
1.先進先出(FIFO)的一種數據結構。
2.隨著向Queue 中添加元素,容量通過重新分配按需自動增加。
可通過調用 TrimToSize 來減少容量。
3.Queue 接受 null 作為有效值并且允許重復的元素。
4.在AI尋路算法中經常用的Queue。
入隊列
queue.Enqueue("li");
queue_2.Enqueue(1);
出隊列
objectobj =queue.Dequeue();
intnumber =queue_2.Dequeue ();
獲取隊列頭部元素
objectobj_1 =queue.Peek();
intnumber_1 =queue_2.Peek ();
Console.WriteLine(obj_1);
Console.WriteLine(number_1);
隊列元素個數
queue_2.Count;
queue.Count;
移除多余空間
queue.TrimToSize();
Console.WriteLine(queue.Count);
查閱MSDN練習堆棧,隊列中的ToArrayCopyTo
Dictionary字典
Dictionary(TKey,TValue)類稱為字典類
TKey表示鍵的類型
TValue表示字典中的值類型
Dictionary類實現了ICollection、IEnumerable、IDictionary·接口。
字典定義如下:
Dictionary<string,int >dic = new Dictionary<string,int>();
字典中鍵必須是唯一的,不是所有類型都可以是鍵(一般是string int),
所有類型都可以作為值
總結:
字典是一個泛型集合
TKey必須唯一,Value可以是變量,也可以是對象
例子:
Dictionary dic = new Dictionary();
dic.Add("One",1);//一組鍵值對
dic.Add("Two",2);
intnumber = dic ["One"];
dic["One"] = 31;
intnumber_2 = dic ["One"];
Console.WriteLine(number);
Console.WriteLine(number_2);
Dictionary strDic = new Dictionary();
strDic["Li"]= "an";//自動Add
strDic["Li"]= "sa";
strDic["Li"] = null;//可以存空對象
Console.WriteLine(strDic.Count);
通過鍵移除對應的值
strDic.Remove("Li");
Console.WriteLine(strDic.Count);
是否包含鍵/值
if(dic.ContainsKey ("Two")) {
Console.WriteLine("包含Two鍵");
}
if(dic.ContainsValue(2)) {
Console.WriteLine("包含2值");
}
打印鍵值對
foreach(string key in dic.Keys){
Console.WriteLine(key + ":"+dic[key]);
}
foreach(int value in dic.Values){
Console.WriteLine("value: "+value);
}
用戶輸入10個姓名,可以重復輸入同一個姓名,輸出每個姓名,并輸出每個姓名輸入的多少次
Dictionary dicName = new Dictionary();
Console.WriteLine("輸入十次姓名");
for(int i = 0; i <= 10; i++) {
stringstr = Console.ReadLine ();
if(dicName.ContainsKey (str)) {
dicName[str] += 1;
}else {
dicName[str] = 1;
}
}
foreach(string name in dicName.Keys) {
Console.WriteLine(name+"出現為"+dicName[name]);
}
AarryList
(非泛型相比泛型效率較低因為要進行裝箱拆箱操作
ArrayList是一個特殊的數組。通過添加和刪除元素,就
可以動態(tài)改變數組的長度。
ArrayList并不是強類型,ArrayList 可能并不總是提供特定任務的最佳性能。
ArrayList類實現了IList、ICollection和IEnumerable接
口。
int[]numbers = {1,23,4,5,11,44};
ArrayList arrayList = new ArrayList (numbers );//默認為一個長度為0的數組
Add添加
arrayList.Add("Wo");
arrayList.AddRange(new int []{9,8,7});
Remove移除
arrayList.Remove(23);//元素
arrayList.RemoveAt(2);//位置
arrayList.RemoveRange(1,2);//從下標1開始數兩為得到逆序數組
arrayList.Reverse();//(可以寫一個范圍的逆序)
兩個對象作比較
arrayList.Equals();
從下標2開始往后截取兩位
ArrayListarr = arrayList.GetRange (2, 2);
查找數組元素下標(在數組中的第一個)
intfirstIndex = arrayList.IndexOf("Wo");
intlastIndex = arrayList.LastIndexOf ("Wo");
插入元素/數組
arrayList.Insert();
arrayList.InsertRange();
更改元素
arrayList.SetRange(2,new string []{"la","do","bili"});
遍歷集合
foreach(object obj in arrayList) {
Console.Write(obj+" ");
}
ArrayList總結:
1.支持自動改變大小的功能。
2.可以靈活的插入元素、刪除元素、訪問元素。
3.不是強類型,速度跟數組比起來要慢。
相對于ArraryList而言,List在大多數情況下執(zhí)行更好,更安全
如果對類型T只用值類型的話,比較速度得考慮裝箱開箱的問題
List(泛型)
List類表示可通過索引訪問的對象的強類型列表。 提供用于對列表進行搜索、排序和操作的方法。List是ArrayList類的泛型等效類,該類使用大小可按需動態(tài)增加的數組實現IList泛型接口。List類同樣也是實現了
ICollection、IEnumerable和IList接口。
例子:
Listnumbers = new List (new int[]{12,3,44,1,15,2});
排序
numbers.Sort();
foreach(int n in numbers ) {
Console.WriteLine(n);
}
自學Hashtable和SortedList。
索引器
(索引器可以重載
總結:
1.數據類型是表示將要存取的數組或集合元素的類型。
2.索引器類型表示該索引器使用哪一類型的索引來存取
數組或集合元素,可以是整數,可以是字符串;
this表示操作本對象的數組或集合成員,可以簡單把它理解成索引器的名字,因此索引器不能具有用戶定義的名稱.
創(chuàng)建一個索引器,對類里面的字典進行數據的存取,用來記錄學生的姓名和分數
歸納:
Stack于Queue有什么區(qū)別。
Dictionary有什么優(yōu)點?
ArrayList和List的比較。