C#(21)集合 字典 索引器

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的比較。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,367評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 98,001評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,213評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,535評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,317評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,868評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,963評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,090評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 48,599評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,549評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,712評論 1 367
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,233評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,961評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,353評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,607評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,321評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,686評論 2 370

推薦閱讀更多精彩內容

  • //非泛型數列取出來都為 objec //棧 對列 數組 都可以純空數據 //Stack 棧 數據結構n 可被繼承...
    媽媽說喝牛奶能長個閱讀 200評論 0 0
  • ArrayList (非泛型集合 using System.Collections;) public void T...
    Unity開發(fā)閱讀 353評論 1 0
  • 1. [C#語言基礎]請簡述拆箱和裝箱。 答: 裝箱操作: 值類型隱式轉換為object類型或由此值類型實現的任何...
    胤醚貔貅閱讀 4,827評論 1 29
  • 首先 會聯(lián)系到相關的數組類型 但是數組有兩個不能改變 1.存入的內容必須需要統(tǒng)一變量類型(除非使用object數組...
    TALY閱讀 202評論 0 0
  • https://msdn.microsoft.com/zh-cn/library/system.collectio...
    LH_晴閱讀 447評論 0 0