C#中的集合–Collection

來源:互聯網
上載者:User

集合,表示可以通過遍曆每個元素來訪問的一組對象(特別是可使用foreach逐一查看)
一個集合包括多個元素,即有一個集合類對象和N個元素對象

---------------------------

因為任何集合類都實現了IEnumerable介面,所以任何集合類對象都有一個GetEnumerator()方法,該方法可以返回一個實現了IEnumerator介面的對象,這個返回的IEnumerator對象既不是集合類對象,也不是集合的元素類對象,它是一個獨立的類對象。通過這個對象,可以遍曆訪問集合類對象中的每一個元素對象

如果集合類是使用者自訂的集合類,則使用者必須實現它的GetEnumerator()方法,否則不能使用迴圈。當然,與這個自訂集合類對應的IEnumerator類(實現了該介面的類),也要自訂一個才行

比如,ArrayList集合類對應的IEnumerator是 ArrayListEnumeratorSimple
            Array集合類對應的IEnumerator是 SZArrayEnumerator
      (這兩個類在.net framework類庫文檔(msdn)中都沒有介紹)

------------------------

1.System.Colloctions中表示集合的行為的介面有:
1)ICollection
定義所有集合的大小、枚舉數和同步方法。派生於IEnumerable
它定義了集合類最基本的行為,所有的集合類都實現了這個介面(基底介面)
但是它的行為太過基本:主要就是一個Count屬性,單獨實現它沒有太大意義

2)IEnumerable
公開枚舉數,該枚舉數支援在集合上進行簡單迭代
它只有一個方法 GetEnumerator(),該方法可以返回一個IEnumerator介面,通過它可以遍曆集合
基本上所有的集合類都實現了這個介面

3)IList
IList實現是可排序且可按照索引訪問其成員的值的集合,它本身實現了ICollection和IEnumerable介面
是所有列表的抽象基類。IList 實現有三種類別:唯讀、固定大小、可變大小。

4)IDictionary
IDictionary實現是鍵/值對的集合,它本身實現了ICollection和IEnumerable介面
是鍵/值對的集合的基底介面。IDictionary 實現有三種類別:唯讀、固定大小、可變大小。
IDictionary可稱為字典、映射或散列表,它根據鍵(任意類型)來訪問值

------------------------------

2.System.Collections中可以直接使用的集合類有:
1)ArrayList
實現了介面:IList、ICollection、IEnumerable
只要集合未被修改,ArrayList 就可安全地同時支援多個讀取器
隨著向 ArrayList 中添加元素,容量通過重新分配按需自動增加(2倍增加)
如果需要建立一個對象數組,但不能預Crowdsourced Security Testing道數組的大小,就可以使用ArrayList
ArrayList把所有元素都當作object對象引用,因而在訪問ArrayList的元素時要進行類型轉換
優點:動態改變大小、靈活方便的插入和刪除元素、可排序
缺點:插入時效能不如數組、不是強型別的

2)BitArray
實現了介面:ICollection、IEnumerable
管理位值的壓縮數組。

3)Hashtable
實現了介面:IDictionary、ICollection、IEnumerable
可以向Hashtable中自由添加和刪除元素,有些像ArrayList,但沒有那麼大的效能開銷

4)SortedList
實現了介面:IDictionary、ICollection、IEnumerable
SortedLIst兼顧了ArrayList和Hashtable的優點,可按索引值來排序

5)Queue
實現了介面:ICollection、IEnumerable
Queque是隊列,先進先出的訪問各個元素
可以調用Queque對象的GetEnumerator()方法,得到IEnumerator對象,來遍曆隊列中的各個元素

6)Stack
實現了介面:ICollection、IEnumerable
Stack是堆棧,後進先出的訪問各個元素
可以調用Stack對象的GetEnumerator()方法,得到IEnumerator對象,來遍曆堆棧中的各個元素

----------------

3.上面提到的幾種集合類,他們都是通用的集合類,他們所接受的元素大都是Object類型,當對象放入
了集合之後,都失去了原有的類型資訊-即這些通用集合類都不是強型別的
解決辦法是使用強型別的集合類
System.Collections命名空間下的CollectionBase,DictionaryBase,ReadOnlyCollectionBase 類
System.Collections.Specialized命名空間下的一些類可以滿足要求,可以直接使用也可以繼承

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.