集合類的容器全部在 system.collections 名字空間下,c# 2.0 由於增添了對泛型程式設計的支援,它又新增了乙個名字空間 system.collections.generic,存放所有支援泛型的各種集合類的容器。
非泛型類容器:實現好的容器有:arraylist,bitarray,hashtable,queue,sortedlist,stack
支援泛型的集合類容器有dictionary,linkedlist,list,queue,sorteddictionary,sortedlist,stack。
使用非泛型帶來了如下問題:
第乙個問題是,使用
system.collections,和system.collections.specialized下的類導致低效能的**,特別是在值型別時,clr必須執行大量的記憶體轉換操作,這會降低執行時的執行速度。
第二個問題,這些經典的集合類不是執行緒安全的,因為他們是為了操作
system.object類而開發的,因此可以包含任何型別。
由於以上兩個問題,
.net 2.0引入了一些全新的集合類,他們打包在system.collections.generic命名空間中。任何使用.net 2.0版本以上的專案都應該放棄舊的非泛型集合類,而應該使用泛型類。
dictionary是乙個泛型
他本身有集合的功能有時候可以把它看成陣列
他的結構是這樣的:dictionary<[key], [value]>
他的特點是存入物件是需要與[key]值一一對應的存入該泛型,過某乙個一定的[key]去找到對應的值
提供快速的基於鍵值的元素查詢,具體使用方法參考鏈結
dictionary詳細介紹使用方法
linkedlist是雙向鍊錶列表。所謂雙向鍊錶列表就是這樣節點鏈條,每個節點都包含前乙個節點引用,後乙個節點引用,以及自己的引用。它最大的益處就是可以高效地插入元素到列表的任意位置
list是陣列鍊錶
linkedlist是指標鍊錶
選擇list還是linkedlist要看你的使用特點:
陣列鍊錶訪問快,複雜度o(1),但是新增刪除複雜度o(n)
指標鍊錶訪問複雜度是o(n),但是新增刪除很快o(1)
using system;
using system.collections.generic;
using system.diagnostics;
命名空間 包含了能夠與系統程序 事件日誌 和效能計數器進行互動的類
//一般用於幫助診斷和除錯應用程式
//查考鏈結
//if (dt.containskey("id1111"))
//", entry);
// wt.stop();
//}dictionary排序
//list> dtsort = new list>(dt);
keyvaluepairdt2)
// );
linkedlist
//linkedlistmylist = new linkedlist();
//for (int i = 0; i < 10000000; i++)
//查詢
"id1111 = ", mylist.find("id1111").value);
//list
listmylist2 = new list();
//新增資料
for (int i = 0; i < 10; i++)
//刪除資料
mylist2.removeat(7);
//修改資料
mylist2[3] = 121;
//遍歷輸出
for(int i = 0;i < mylist2.count;i++)
,", mylist2[i]);
}console.writeline(" ");
//排序
mylist2.sort(delegate(int a,int b) );
//遍歷輸出
foreach (int item in mylist2)
,", item);
}console.readkey();}}
}
queue和queue是先進先出(fifo)的資料結構,通過enqueue和dequeue方法實現新增元素到佇列的尾部和從佇列的頭部移除元素。peek方法從佇列的頭部獲取乙個元素(不移除該元素),count屬性用來統計佇列中元素的個數(在執行出列操作時檢查元素是否存在非常有用)。
儘管佇列是可遍歷的,但是它們並沒有實現ilist介面和ilist介面,因此也不能通過索引來訪問佇列中的元素。雖然也提供了toarray方法,但是在複製元素時是從佇列中隨機讀取的。
C 學習筆記之容器
list 和 vector 2者都屬於容器,但list只有雙向迭代器,而vector卻有隨機訪問迭代器 迭代器的種類 前向迭代器 forward iterator 可對迭代器進行 操作雙向迭代器 bidirectional iterator 可對迭代器進行 和 操作隨機訪問迭代器 random ac...
c 學習之容器 erase 函式
先介紹erase 函式的用法,erase 函式用於在順序型容器中刪除容器的乙個元素,有兩種函式原型,c.erase p c.erase b,e 第乙個刪除迭代器p所指向的元素,第二個刪除迭代器b,e所標記的範圍內的元素,c為容器物件,返回值都是乙個迭代器,該迭代器指向被刪除元素後面的元素 這個是重點...
C 學習隨筆之向量容器vector
1.動態陣列,可以在執行階段設定長度 2.具有陣列的快速索引方式 3.可以插入和刪除元素 使用vector的時候要包含 includevector verdouble for int i 0 i vecdouble.size i vector iterator it for it vecdouble...