黑馬程式設計師 集合類的CRUD

2021-06-16 18:25:11 字數 3980 閱讀 1506

---------------------- asp.net+android+io開發s、.net培訓、期待與您交流! ----------------------

arraylist 可變長度陣列,使用類似於陣列

屬性 capacity(集合中可以容納元素的個數,翻倍增長); count(集合中實際存放的元素的個數。)

方法 add()  addrange(icollection c)  remove() removeat() clear() 

contains()  toarray() sort() 排序\reverse();//反轉

hashtable 鍵值對的集合,類似於字典,hashtable在查詢元素的時候,速度很快。 

add(object key,object value);

hash[「key」]

hash[「key」]=「修改」;

.containskey(「key」);

remove(「key」);

遍歷:hash.keys

hash.values/dictionaryentry

鍵值對集合中的「鍵」,絕對不能重複。

arraylist (非泛型)→ list(泛型)

hashtable(非泛型) → dictionary(泛型)

gethashcode 方法適用於雜湊演算法和諸如雜湊表之類的資料結構。 

gethashcode 方法的預設實現不保證針對不同的物件返回唯一值。而且,.net framework 不保證 gethashcode 方法的預設實現以及它所返回的值在不同版本的 .net framework 中是相同的。因此,在進行雜湊運算時,該方法的預設實現不得用作唯一物件識別符號。 

gethashcode 方法可以由派生型別重寫。值型別必須重寫此方法,以提供適合該型別的雜湊函式和在雜湊表中提供有用的分布。為了獲得最佳結果,雜湊**必須基於例項欄位或屬性(而非靜態欄位或屬性)的值。 

用作 hashtable 物件中鍵的物件還必須重寫 gethashcode 方法,因為這些物件必須生成其各自的雜湊**。如果用作鍵的物件不提供 gethashcode 的有用實現,您可以在構造 hashtable 物件時指定雜湊**提供程式。在 .net framework 2.0 版之前,雜湊**提供程式是基於 system.collections.ihashcodeprovider 介面的。從 2.0 版開始,雜湊**提供程式基於 system.collections.iequalitycomparer 介面。 

對實現者的說明: 

雜湊函式用於快速生成乙個與物件的值相對應的數字(雜湊**)。雜湊函式通常是特定於每個 type 的,而且,必須至少使用乙個例項字段作為輸入。 

雜湊函式必須具有以下特點: 

如果兩個物件的比較結果相等,則每個物件的 gethashcode 方法都必須返回同乙個值。但是,如果兩個物件的比較結果不相等,則這兩個物件的 gethashcode 方法不一定返回不同的值。 

乙個物件的 gethashcode 方法必須總是返回同乙個雜湊**,但前提是沒有修改過物件狀態,物件狀態用來確定物件的 equals 方法的返回值。請注意,這僅適用於應用程式的當前執行,再次執行該應用程式時可能會返回另乙個雜湊**。 

為了獲得最佳效能,雜湊函式必須為所有輸入生成隨機分布。 

例如,string 類提供的 gethashcode 方法的實現為相同的字串值返回相同的雜湊**。因此,如果兩個 string 物件表示相同的字串值,則它們返回相同的雜湊**。另外,該方法使用字串中的所有字元生成相當隨機的分布式輸出,即使當輸入集中在某些範圍內時(例如,許多使用者可能有只包含低位 128 個 ascii 字元的字串,即使字串可以包含 65,535 個 unicode 字元中的任何字元)。 

對於 object 的派生類,當且僅當此派生類將值相等性定義為引用相等並且型別不是值型別時,gethashcode 方法才可以委託給 object.gethashcode 實現。 

在類上提供好的雜湊函式可以顯著影響將這些物件新增到雜湊表的效能。在具有好的雜湊函式實現的雜湊表中,搜尋元素所用的時間是固定的(例如運算複雜度為 o(1) 的運算)。而在具有不好的雜湊函式實現的雜湊表中,搜尋效能取決於雜湊表中的項數(例如運算複雜度為 o(n) 的運算,其中的 n 是雜湊表中的項數)。雜湊函式的計算成本也必須不高。 

gethashcode 方法的實現必須不會導致迴圈引用。例如,如果 classa.gethashcode 呼叫 classb.gethashcode,classb.gethashcode 必須不直接或間接呼叫 classa.gethashcode。 

gethashcode 方法的實現必須不引發異常。 

重寫 gethashcode 的派生類還必須重寫 equals,以保證被視為相等的兩個物件具有相同的雜湊**;否則,hashtable 型別可能無法正常工作。 

//看執行速度

stopwatch sw = new stopwatch();

sw.start();

mydic.containskey("china");

sw.stop();

messagebox.show(sw.elapsed.tostring());

class keypair

set

}private string value;

public string value

set }}

class mydict

public bool containskey(string key)

}return false;}}

array是所有陣列的父類。

arraylist集合中可以存放任何型別的資料,

但是無論什麼型別的資料放到arraylist中以後都變成了object型別。

所以從arraylist中取出的資料需要型別轉換。

不要把random的例項化放到迴圈裡面!

可以使用兩個集合來降低產生隨機數的迴圈次數。 

random在迴圈中會降低執行效率(每次new的時候的種子是一樣的,當前時間。)

命名空間system.collections.generic

list類似於arraylist,arraylist的公升級版。

各種方法:sort()、max()、min()、sum()…

dictionary類似於hashtable,hashtable的公升級版。

推薦使用泛型集合。

t,k,v就像一把鎖,鎖住集合只能存某種特定的型別,這裡的t,k,v也可以是其它字母 

泛型集合可以進行foreach遍歷,是因為實現了ienumerable具有了getenumerator()方法

arraylist al1 = new arraylist() ;

arraylist al2 = new arraylist() ;

arraylist al3 = new arraylist();

al3.addrange(al1);

foreach (string str in al2)

}foreach (string str in al3)

*************************===

arraylist al = new arraylist();

random ran = new random();

while (al.count < 10)}}

***********************************====

string s = "5 8 9 10 11 22 4 3";

arraylist al1 = new arraylist();

arraylist al2 = new arraylist();

string arr = s.split(' ');

foreach (string item in arr)

else 

}al1.addrange(a2)

---------------------- asp.net+android+ios開發、.net培訓、期待與您交流! ----------------------

詳細請檢視:

黑馬程式設計師 Collection集合類

set treeset 2.map treemap hashtable map 一次存兩個物件,鍵值對 hashmap 使用雜湊演算法對鍵去重複,效率高,但無序 linkedhashmap 使用雜湊演算法去重複,並且保留儲存順序 treemap 使用二叉樹演算法排序,可以自定義順序 hashtabl...

黑馬程式設計師 集合

collection list 元素是有序的,元素可以重複。因為該集合體系有索引。arraylist 底層的資料結構使用的是陣列結構。特點 查詢速度很快。但是增刪稍慢。執行緒不同步。linkedlist 底層使用的鍊錶資料結構。特點 增刪速度很快,查詢稍慢。執行緒不同步。vector 底層是陣列資料...

黑馬程式設計師 集合

asp.net unity開發 net培訓 期待與您交流!1.集合類 為什麼會出現集合類?面對物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,就對物件進行儲存,集合就是儲存物件最常用的一種方式。集合類的特點 集合只用於儲存物件,集合的長度是可變的,集合可以儲存不同型別的物件。集合...