也就是陣列。具體表示方法是:資料型別[維數] 陣列名=new 資料型別
陣列有很多的優點,比如說陣列在記憶體中是連續儲存的,所以它的索引速度是非常的快,而且賦值與修改元素也很簡單,
比如://宣告乙個一維陣列
intarray1 = new int[3];
//初始化乙個一維陣列
intarray1 = new int[3];
intarray1 = new int;
//賦值
s[0]="a";
s[1]="b";
s[2]="c";
//修改
s[1]="b1";
//宣告乙個二維陣列
int[,] cells=int[3,3];
int[,] cells=,,}; //初始化乙個二維整數陣列
陣列的不足之處在於,使用陣列管理資料時,需要預先知道陣列長度。而實際開發中,很多資料往往是無法事先知道元素個數的。
陣列是一種非常有用的資料結構,但陣列也具有嚴重的侷限性。
①陣列元素的資料型別必須是相同的
②在建立陣列時必須知道元素個數
③對應用程式來說,需要通過迴圈索引來訪問元素。
針對於陣列的這些缺點,c#中最先提供了arraylist物件來克服這些缺點。
適應於知道陣列長度並且在使用過程中不需要插入元素的情況。
動態陣列,用法似乎跟c++的vector有點像。使用arraylist必須引用collections類。
用於資料儲存和檢索的專用類。它的大小是按照其中儲存的資料來動態擴充與收縮的。所以,我們在宣告arraylist物件時並不需要指定它的長度。
arraylist繼承了ilist介面,所以它可以很方便的進行資料的新增,插入和移除。比如:
arraylist list = new arraylist(); //新增資料
list.add("abc"); list.add(123); //修改資料
list[2] = 345; //移除資料
list.removeat(0); //插入資料
list.insert(0, "hello world");
新增刪除
排序 sort();
反轉 reverse();
查詢從上面示例看,arraylist好像是解決了陣列中所有的缺點,在list中,我們不僅插入了字串"abc",而且又插入了數字123。這樣在arraylist中插入不同型別的資料是允許的。因為arraylist會把所有插入其中的資料都當作為object型別來處理。這樣,在我們使用arraylist中的資料來處理問題的時候,很可能會報型別不匹配的錯誤,也就是說arraylist不是型別安全的。
既使我們保證在插入資料的時候都很小心,都有插入了同一型別的資料,但在使用的時候,我們也需要將它們轉化為對應的原型別來處理。這就存在了裝箱與拆箱的操作,會帶來很大的效能損耗。
穿插一下裝箱與拆箱的概念: 簡單的來講: 裝箱:就是將值型別的資料打包到引用型別的例項中 比如將int型別的值123賦給object物件o int i=123; object o=(object)i; 拆箱:就是從引用資料中提取值型別 比如將object物件o的值賦給int型別的變數i object o=123; int i=(int)o; 裝箱與拆箱的過程是很損耗效能的。
arraylist與array的區別
常用集合
堆疊 stack、stack,堆疊的特點是後進先出(lifo, last in first out)。
佇列 queue、queue,佇列的特點是先進先出(fifo, first in first out)。
可排序鍵值對:特點是插入、檢索沒有雜湊表集合高效
set集合:特點是無序、不重複。
雙向鍊錶集合:linkedlist特點是增刪速度快
1、bcl中集合型別分為泛型集合與非泛型集合。
2、非泛型集合的類和介面位於system.collections命名空間。
3、泛型集合的類和介面位於system.collections.generic命名空間。
同傳統的集合相比,泛型集合是一種強型別的集合,它解決了型別安全問題,同時避免了集合中每次的裝箱與拆箱的操作,提公升了效能。
1. list,這是我們應用最多的泛型種類,它對應arraylist集合。
2. dictionary,這也是我們平時運用比較多的泛型種類,對應hashtable集合。
3. collection對應於collectionbase
4. readonlycollection 對應於readonlycollectionbase,這是乙個唯讀的集合。
5. queue,stack和sortedlist,它們分別對應於與它們同名的非泛型類。
c#2.0後出現了list。
泛型集合:
①list
list names = new list();
names.add("喬峰");
names.add("歐陽峰");
names.add("馬蜂");
foreach (string name in names)
//向list中插入元素
names.insert(2, "張三峰");
//移除指定元素
names.remove("馬蜂");
②dictionary
system.collections.dictionaryentry dic=new system.collections.dictionaryentry("key1","value1");
dictionary fruit = new dictionary(); //加入重複鍵會引發異常
fruit.add(1, "蘋果");
fruit.add(2, "桔子");
fruit.add(3, "香蕉");
fruit.add(4, "菠蘿"); //因為引入了泛型,所以鍵取出後不需要進行object到int的轉換,值的集合也一樣
foreach (int i in fruit.keys) 值是:",i,fruit);
}//刪除指定鍵值
fruit.remove(1);
//判斷是否包含指定鍵
if (fruit.containskey(1))
//清除集合中所有物件
fruit.clear();
sortedlist類 與雜湊表類似,區別在於sortedlist中的key陣列排好序的
stack類 棧,後進先出。push方法入棧,pop方法出棧。
queue類 佇列,先進先出。enqueue方法入佇列,dequeue方法出佇列。
非泛型集合:
①hashtable
hashtable abc = new hashtable();
abc.add("1", "34"); (key,value)
if (abc.contains("1"))
hashtable與dictionary異同點
在單執行緒程式中推薦使用dictionary,由於具有泛型優勢且讀取速度較快,其容量利用會更加充分。
在多執行緒程式中推薦使用hashtable,預設的hashtable允許單執行緒寫入多執行緒讀取,對hashtable進一步呼叫synchronized()方法可獲得完全執行緒安全的型別。而dictionary是非執行緒安全的,必須人為使用lock語句進行保護,其效率大減。
經過測試發現,但key是整型時dictionary的操作效率要高於hashtable,而當key是字串時則dictionary的效率並沒有hashtable的快。
dictionary有按插入順序排列資料的特性,但是當呼叫remove()方法刪除節點後原來的順序會被打亂掉。因此在需要體現順序的場景中使用dictionary能獲得一定的便利。
遍歷dictionary時會採用插入時的順序,而遍歷hashtable則是打亂掉的。
雜湊表的遍歷
雜湊表的遍歷使用foreach,由於雜湊表中的元素是鍵值對,因此需要使用dictionaryentry型別來進行遍歷。dictionaryentry型別表示乙個鍵值對的集合。
hashtable ht = new hashtable();
ht.add("userid", 1);
ht.add("userno", "bh0001");
ht.add("username", "tim");
ht.add("usergender", 1); foreach(dictionaryentry dic in ht) = ");}
②queue
system.collections.queue queue=new system.collections.queue();
queue.enqueue(1);
queue.enqueue(2);
system.console.writeline(queue.peek());
while(queue.count>0)
③sortedlist
system.collections.sortedlist list=new system.collections.sortedlist();
list.add("key2",2);
list.add("key1",1);
for(int i=0;i0)
C 高階之路 5 C 陣列與集合
c 高階之路 5.c 陣列與集合 基礎 c 的資料組合分為陣列和集合兩種。陣列一維陣列和多維陣列 集合普通集合 泛型集合,雜湊表,字典表,特殊集合等 特殊集合 佇列和堆疊等 陣列一維陣列 int 陣列名 new int 2 方括號裡是陣列的長度 多維陣列 int 陣列2 new int 2,3 方括...
5 c語言陣列
其中包括 冒泡 高精度加法 統計不相同的數字個數 陣列 陣列元素倒序輸出 go 1 include 234 5功能 冒泡67 6功能 高精度加法78 9void main 10 12int b m 13int c m 14char s m 1 15 int i 0 16 int n1 0 17 in...
5C 暴庫漏洞
的unicode是 5c,主要就是暴庫漏洞 那麼,我看到下面四種情況 1,直接暴庫,解決方法在conn.asp中加入on error resume next duoluo.webdream dlog 5cshowlog.asp?cat id 16 log id 444 2,不顯示任何資訊,原因已打入...