久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

.NET集合類:定義,用途及使用條件

 kittywei 2012-02-29

集合(collection)提供了一種結構化組織任意對象的方式,,而且我們早就知道集合在日常編程工作中的重要性,。.NET類庫提供了豐富的集合數(shù)據(jù)類型,其種類之繁多甚至使許多人看得眼都花了,,這些集合對象都具有各自的專用場合,。不管怎么說,更多的選擇也就意味著更高的靈活性,,但同時也意味著更高的復雜性,。因此,對集合各個類型的用途和使用條件具有適度的了解是完全必要的,。下面就請隨我進行一場.NET集合之旅吧,!

.NET集合類定義

從.NET 的角度看,,所謂的集合可以定義為一種對象,這種對象實現(xiàn)一個或者多個System.Collections.ICollection,、 System.Collections.IDictionary和System.Collections.IList接口,。這一定義把 System.Collections名稱空間中的“內(nèi)置”集合劃分成了三種類別:

◆有序集合:僅僅實現(xiàn)ICollection接口的集合,在通常情況下,,其數(shù)據(jù)項目的插入順序控制著從集合中取出對象的的順序,。 System.Collections.Stack和 System.Collections.Queue類都是ICollection集合的典型例子。

◆索引集合:實現(xiàn)Ilist的集合,,其內(nèi)容能經(jīng)由從零開始的數(shù)字檢索取出,就象數(shù)組一樣,。System.Collections.ArrayList對象是索引集合的一個例子,。

◆鍵式集合:實現(xiàn) IDictionary 接口的集合,其中包含了能被某些類型的鍵值檢索的項目,。IDictionary集合的內(nèi)容通常按鍵值方式存儲,,可以用枚舉的方式排序檢索。 System.Collections.HashTable類實現(xiàn)了IDictionary 接口,。

正如你看到的那樣,,給定集合的功能在很大程度上受到特定接口或其實現(xiàn)接口的控制。如果你對面向對象編程缺乏了解,,那么你可能對上面說的這些話感到難以理解,。不過你至少應該知道,以接口這種方式構造對象的功能不但造就了具有整套類似方法的對象族,,而且還能讓這些對象在必要的情況下可以當作同類,,以OOP (面向對象編程)的術語來說,這就是大名鼎鼎的多態(tài)性技術,。

System.Collections概述

System.Collections 名稱空間包含了在你的應用程序中可以用到的6種內(nèi)建通用集合,。另一些更為專業(yè)化的集合則歸屬于 System.Collections.Specialized,在某些情況下你會發(fā)現(xiàn)這些專用集合也是非常有用的,。加上一些異常(exception)類,,這些專業(yè)化集合在功能上和內(nèi)建集合是類似的。現(xiàn)在就讓我們審視一下通用集合以及少量的不太富于專業(yè)化的集合,。

堆棧和隊列

System.Collections.Stack 和 System.Collections.Queue 類,,兩者僅僅實現(xiàn)了ICollection 接口,按照存儲項目加到集合的順序保存System.Object類型的項目,。對象只能按其加入順序從集合中檢索:堆棧是后進先出,,而隊列則是先進先出。通常情況下,,你在以下場合可以考慮采用以上這些集合:

◆接收和處理集合內(nèi)項目時順序比較重要,。

◆你能在處理項目之后丟棄它,。

◆你不需要訪問集合中的任意項目。

ArrayList

System.Collections.ArrayList 類,,僅僅實現(xiàn) Ilist,,最適合描述為一種正常數(shù)組和集合的混合類型。ArrayList按照項目被加入集合的順序存儲項目,。每個項目都被分配一個索引標識符而且能由關聯(lián)它們的索引數(shù)字以任何順序被檢索,。當新項目加入集合時會擴大ArrayList從而令其相比普通數(shù)組更具靈活性。然而,,ArrayList負載比傳統(tǒng)數(shù)組更大而且沒有實現(xiàn)嚴格的類型化,,也就可以接受任何轉換為System.Object的對象(換句話說,對什么東西都來者不拒),。

SortedList

System.Collections.SortedList,,它實現(xiàn)了IDictionary和ICollection接口,是最基本的排序集合,,與Vb6下的Collection對象非常類似,。 SortedList存儲對象并按照關聯(lián)的鍵值對這些存儲對象排序。它們也是同時支持索引數(shù)字和鍵對象檢索的唯一內(nèi)建的.NET集合,。

HashTable

強有力的System.Collections.HashTable集合實現(xiàn)了IDictionary 和 Icollection,,能用來存儲多種類型的對象連同關聯(lián)的唯一字符串鍵值。在HashTable集合中的項目按照源自其鍵值的哈希代碼所確定的順序存儲,。集合內(nèi)每個對象的鍵值都必須唯一,,而其哈希代碼則不一定唯一。
什么是哈希代碼,?
哈希代碼實質(zhì)上就是從一快數(shù)據(jù)中消除所有冗余部分之后的結果,,它主要起到對數(shù)據(jù)輔助分類或排序的作用。

當某個項目加入集合時,,HashTable即調(diào)用鍵值的GetHashCode方法,,由于所有的類都是從System.Objec繼承的,所以調(diào)用該方法即可確定該類的哈希代碼并且按該代碼排序存儲,。你可以強迫使用定制的哈希函數(shù),,方法有二,,一是重載類的GetHashCode方法,,二是向 HashTable構造器傳遞實現(xiàn)了System.Collections.IHashcodeProvider接口的對象,,在這種情況下,,該對象將用于為所有加入集合的鍵值產(chǎn)生哈希代碼。

從性能的角度看,,因為鍵值搜索僅限于具有同樣哈希代碼的鍵值,,所以HashTable能夠很快地從集合中檢索任意一個元素,,從而減少了必須通過檢查以發(fā)現(xiàn)匹配的鍵值的數(shù)量。然而,,因為插入到集合中的每個對象-鍵值對都必須產(chǎn)生相應的哈希代碼,,所以項目插入的代價就有點高了。因此,,HashTable主要運用在按照任意鍵值反復檢索大量相對靜態(tài)的數(shù)據(jù)這一場合下,。

ListDictionary 和 HybridDictionary

ListDictionary 和 HybridDictionary 類歸屬于System.Collections.Specialized。它們都在按照唯一鍵值的原則來組織項目,,而且都實現(xiàn)了 IDictionary 和 ICollection ,。ListDictionary在內(nèi)部以鏈表的方式存儲項目,建議用在不會增長超過10個項目的集合中,。HybridDictionary采用一個內(nèi)部鏈表(實際上就是ListDictionary)作為小集合,,當集合變得足夠大(超過10個項目)以至于鏈表實現(xiàn)效率降低時就會轉換為HashTable。

StringCollection 和 StringDictionary

System.Collections.Specialized.StringCollection 和 System.Collections.Specialized.StringDictionary 都對存儲字符串的集合進行了優(yōu)化,。 StringCollection實現(xiàn)了 IList 和 ICollection 而且實質(zhì)上就是ArrayList,,只不過實現(xiàn)了強烈的類型化僅僅接受字符串而已。StringCollection最理想的應用場合是經(jīng)常更新或增加的少量數(shù)據(jù),,而StringDictionary則最適用于不經(jīng)常增加項目到諸如HashTable之類集合中的大量數(shù)據(jù)。

NameValueCollection

System.Collections.Specialized.NameValueCollection 最有趣的地方在于它能包含關聯(lián)同一鍵值的多個項目,,這正是它與其他內(nèi)建集合的差別所在,。除此以外,它在功能上類似HashTable,,按照源自每一項目鍵值的哈希代碼對項目排序從而也具有類同的優(yōu)缺點,。

.NET集合類存在的問題

如果說由 .NET 類庫所提供的內(nèi)建集合也存在問題的話,那多半是它們幾乎都在內(nèi)部把項目存儲為System.Object. 類型,。從最大靈活性的角度看那是一個好想法,,但同時也給采用這些通用集合的程序員提出了一些問題。首先,,只要你把一個新項目加到集合中去,,運行時就必須實施類型轉換操作(創(chuàng)建值類型的索引以便可以當作對象引用)。這是一種低效的操作而且在處理大型集合時會產(chǎn)生相當可觀的性能問題,。其次,,只要你訪問通用集合中的一個項目,該項目都將作為System.Object類型被返回,,這就意味著你不得不把它轉換為真實的類型才能對其進行有意義的操作,。

以上就是.NET集合類的定義介紹。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多