5 C 集合與陣列

2021-08-28 07:50:55 字數 4666 閱讀 3465

也就是陣列。具體表示方法是:資料型別[維數] 陣列名=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,不顯示任何資訊,原因已打入...