.Net各种集合类型的区别
生活随笔
收集整理的這篇文章主要介紹了
.Net各种集合类型的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
.Net各種集合類型的區別
Net集合類型: ?
?
? ?((I)).集合類型 ? ? ?
? ? ? ?1.一般集合 ?
? ? ? ? ? ? ? ?I.Array ?
? ? ? ? ? ? ? ? ? ? ? ?a.Array中的秩是Array中的維數.一個Array可以有一個或多個秩. ?
? ? ? ? ? ? ? ? ? ? ? ? ? ?Array具有固定的容量.如果有可變容量,則用Array.CreateInstance,其可以不從零開始存儲. ?
? ? ? ? ? ? ? ?II.ArrayList集合類型 ?
? ? ? ? ? ? ? ? ? ? ? ?a.是數組的復雜版本.Array是數組是固定的,而ArrayList類是根據需要自動擴展的.如果更改了Array.Capacity屬性的值,則自動進行內存重新分配和元素復制. ?
? ? ? ? ? ? ? ? ? ? ? ?b.ArrayList提供添加/或移除某一范圍元素的方法.在Array中,只能一次獲取或設置一個元素的值. ?
? ? ? ? ? ? ? ? ? ? ? ?c.使用 ?Synchronized方法可以很容易地創建ArrayList的同步版本.而Array將一直保持它,直到用戶實現同步為止. ?
? ? ? ? ? ? ? ? ? ? ? ?d.ArrayList提供將只讀和固定大小包裝返回到集合的方法.而Array不提供. ?
? ? ? ? ? ? ? ? ? ? ? ?e.Array提供ArrayList所不具有的某些靈活性. ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?I.可以設置Array的下限,但ArrayList的下限始終為零. ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?II.Array可以具有多個維度,而ArrayList始終是唯一的. ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?III.Array是特定類型(不是Object),比ArrayList性能好.ArrayList在存儲和檢索時經常發生拆箱和裝箱操作現象. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?III.哈希表集合 ?
? ? ? ? ? ? ? ? ? ? ? ?a.Hashtable類基于IDictionary接口,因此該集合中的每一元素是鍵和值對. ?
? ? ? ? ? ? ? ? ? ? ? ?b.Object.GetHashCode方法為其自身生成哈希代碼.還可以通過使用Hashtable構造函數,為所有元素指定一個哈希函數. ?
? ? ? ? ? ? ? ?IV.SortedList集合類型 ?
? ? ? ? ? ? ? ? ? ? ? ?a.SortedList類類似于Hashtable和ArrayList間的混合. ?
? ? ? ? ? ? ? ? ? ? ? ?b.SortedList的每一元素都是鍵對值,提供只返回鍵列表或只返回值列表的方法. ?
? ? ? ? ? ? ? ? ? ? ? ?c.如果想要一個保留鍵和值的集合,并且還需要索引的靈活性,則使用SortList. ?
? ? ? ? ? ? ? ?V.隊列集合類型 ? ?
? ? ? ? ? ? ? ? ? ? ? ?a.如果需要以信息在集合中存儲的相同順序來訪問這些信息,請使用Queue. ?
? ? ? ? ? ? ? ? ? ? ? ?b.Enqueue將一個元素添加到Queue的隊尾. ?Dequeue從Queue處移除最舊的元素. ?Peek從Queue的開始處返回最舊的元素,但不將從Queue中移除. ?
? ? ? ? ? ? ? ?VI.堆棧集合類型 ?
? ? ? ? ? ? ? ? ? ? ? ?a.如果需要以信息在集合中存儲的相反順序來訪問這些信息,請使用Queue. ?
? ? ? ? ? ? ? ? ? ? ? ?b.Push在Stack的頂部插入一個元素. ?Pop在Stack的頂部移除一個元素. ?Peek返回處于Stack頂部的元素,但不將其從棧頂上移除. ?
? ? ? ? ?2.位集合 ?
? ? ? ? ? ? ? ?I.BitArray ?
? ? ? ? ? ? ? ? ? ? ?a.BitArray是一個集合類,容量與計數相同.通過增加Length屬性來將元素添加到BitArray中;通過降低Length屬性將元素刪除. ?
? ? ? ? ? ? ? ? ? ? ?b.獨特方法,如 ?And/Or/Xor/Not/SetAll. ?
? ? ? ? ? ? ? ? ? ? ?c.位于 ?System.Collections中. ?
? ? ? ? ? ? ? ?II.BitVector32 ?
? ? ? ? ? ? ? ? ? ? ?a.速度快,精確存儲32位,并且同時存儲標志位和小整數. ?
? ? ? ? ? ? ? ? ? ? ?b.位于 ?System.Collections.Specialized中. ? ?
? ? ? ? ?3.專用集合 ? ?
? ? ? ? ? ? ? ?I.NameValueCollection ?
? ? ? ? ? ? ? ? ? ? ?a.基于NameObjectCollectionBase,但NameValueCollection可以接受每個鍵多個值,而 ?NameObjectCollectionBase接受每個鍵,但只有一個值. ? ? ? ?
? ? ?((2)).選擇用哪種集合 ? ?
? ? ? ? ?*** ?Queue或Stack:需要一個序列列表,其中的元素在檢索后放棄.否則,用其它集合. ?
? ? ? ? ?*** ?Queue或Stack:按一定的順序訪問這些元素(先進先出,后進先出),如果隨機,用其它集合. ?
? ? ? ? ?*** ?是否通過索引訪問每一個元素? ?
? ? ? ? ? ? ? ? ?* ?ArrayList和StringCollection ?提供通過元素的從零開始的*索引*對其元素進行訪問. ?
? ? ? ? ? ? ? ? ?* ?(Hashtable) ?(SortedList) ?(ListDictionary) ?(StringDictionary) ?提供通過元素的*鍵*對其元素進行訪問 ?
? ? ? ? ? ? ? ? ?* ?(NameObjectCollectionBase) ?和 ?(NameValueCollection) ?提供或者通過元素的從零開始的*索引*或者通過元素的*鍵*對其元素進行訪問. ?
? ? ? ? ?*** ?每一元素將包含一個值/一個值和一個鍵的組合還是一個鍵和多個值的組合? ?
? ? ? ? ? ? ? ? ?* ?一個值: ?使用基于 ?IList ?的任何集合 ?
? ? ? ? ? ? ? ? ?* ?一個鍵和一個值: ?使用基于 ?IDictionary ?的任何集合. ?
? ? ? ? ? ? ? ? ?* ?一個鍵和多個值: ?使用 ?System.Collections.Specialized ?命名空間中的 ?NameValueCollection ?類. ?
? ? ? ? ?*** ?是否需要用與元素方式不同的方式對元素排序? ?
? ? ? ? ? ? ? ? ?* ?Hashtable ?通過鍵的哈希代碼對元素進行排序. ?
? ? ? ? ? ? ? ? ?* ?SortedList ?基于 ?IComparer ?實現,通過鍵對元素進行排序. ?
? ? ? ? ? ? ? ? ?* ?ArrayList ?提供 ?Sort方法該方法將 ?IComparer ?實現作為一個參數采用. ?
? ? ? ? ?*** ?是否需要信息的快速搜索和檢索? ?
? ? ? ? ? ? ? ? ?* ?對于小集合(十項或更少),ListDictionary ?快于 ?Hashtable. ?
? ? ? ? ?*** ?是否需要只接受字符串的集合? ?
? ? ? ? ? ? ? ? ?* ?StringCollection ?(基于 ?IList) ?和 ?StringDictionary ?(基于 ?IDictionary) ?位于 ?System.Collections.Specialized ?命名空間中.
?
? ?((I)).集合類型 ? ? ?
? ? ? ?1.一般集合 ?
? ? ? ? ? ? ? ?I.Array ?
? ? ? ? ? ? ? ? ? ? ? ?a.Array中的秩是Array中的維數.一個Array可以有一個或多個秩. ?
? ? ? ? ? ? ? ? ? ? ? ? ? ?Array具有固定的容量.如果有可變容量,則用Array.CreateInstance,其可以不從零開始存儲. ?
? ? ? ? ? ? ? ?II.ArrayList集合類型 ?
? ? ? ? ? ? ? ? ? ? ? ?a.是數組的復雜版本.Array是數組是固定的,而ArrayList類是根據需要自動擴展的.如果更改了Array.Capacity屬性的值,則自動進行內存重新分配和元素復制. ?
? ? ? ? ? ? ? ? ? ? ? ?b.ArrayList提供添加/或移除某一范圍元素的方法.在Array中,只能一次獲取或設置一個元素的值. ?
? ? ? ? ? ? ? ? ? ? ? ?c.使用 ?Synchronized方法可以很容易地創建ArrayList的同步版本.而Array將一直保持它,直到用戶實現同步為止. ?
? ? ? ? ? ? ? ? ? ? ? ?d.ArrayList提供將只讀和固定大小包裝返回到集合的方法.而Array不提供. ?
? ? ? ? ? ? ? ? ? ? ? ?e.Array提供ArrayList所不具有的某些靈活性. ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?I.可以設置Array的下限,但ArrayList的下限始終為零. ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?II.Array可以具有多個維度,而ArrayList始終是唯一的. ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?III.Array是特定類型(不是Object),比ArrayList性能好.ArrayList在存儲和檢索時經常發生拆箱和裝箱操作現象. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?III.哈希表集合 ?
? ? ? ? ? ? ? ? ? ? ? ?a.Hashtable類基于IDictionary接口,因此該集合中的每一元素是鍵和值對. ?
? ? ? ? ? ? ? ? ? ? ? ?b.Object.GetHashCode方法為其自身生成哈希代碼.還可以通過使用Hashtable構造函數,為所有元素指定一個哈希函數. ?
? ? ? ? ? ? ? ?IV.SortedList集合類型 ?
? ? ? ? ? ? ? ? ? ? ? ?a.SortedList類類似于Hashtable和ArrayList間的混合. ?
? ? ? ? ? ? ? ? ? ? ? ?b.SortedList的每一元素都是鍵對值,提供只返回鍵列表或只返回值列表的方法. ?
? ? ? ? ? ? ? ? ? ? ? ?c.如果想要一個保留鍵和值的集合,并且還需要索引的靈活性,則使用SortList. ?
? ? ? ? ? ? ? ?V.隊列集合類型 ? ?
? ? ? ? ? ? ? ? ? ? ? ?a.如果需要以信息在集合中存儲的相同順序來訪問這些信息,請使用Queue. ?
? ? ? ? ? ? ? ? ? ? ? ?b.Enqueue將一個元素添加到Queue的隊尾. ?Dequeue從Queue處移除最舊的元素. ?Peek從Queue的開始處返回最舊的元素,但不將從Queue中移除. ?
? ? ? ? ? ? ? ?VI.堆棧集合類型 ?
? ? ? ? ? ? ? ? ? ? ? ?a.如果需要以信息在集合中存儲的相反順序來訪問這些信息,請使用Queue. ?
? ? ? ? ? ? ? ? ? ? ? ?b.Push在Stack的頂部插入一個元素. ?Pop在Stack的頂部移除一個元素. ?Peek返回處于Stack頂部的元素,但不將其從棧頂上移除. ?
? ? ? ? ?2.位集合 ?
? ? ? ? ? ? ? ?I.BitArray ?
? ? ? ? ? ? ? ? ? ? ?a.BitArray是一個集合類,容量與計數相同.通過增加Length屬性來將元素添加到BitArray中;通過降低Length屬性將元素刪除. ?
? ? ? ? ? ? ? ? ? ? ?b.獨特方法,如 ?And/Or/Xor/Not/SetAll. ?
? ? ? ? ? ? ? ? ? ? ?c.位于 ?System.Collections中. ?
? ? ? ? ? ? ? ?II.BitVector32 ?
? ? ? ? ? ? ? ? ? ? ?a.速度快,精確存儲32位,并且同時存儲標志位和小整數. ?
? ? ? ? ? ? ? ? ? ? ?b.位于 ?System.Collections.Specialized中. ? ?
? ? ? ? ?3.專用集合 ? ?
? ? ? ? ? ? ? ?I.NameValueCollection ?
? ? ? ? ? ? ? ? ? ? ?a.基于NameObjectCollectionBase,但NameValueCollection可以接受每個鍵多個值,而 ?NameObjectCollectionBase接受每個鍵,但只有一個值. ? ? ? ?
? ? ?((2)).選擇用哪種集合 ? ?
? ? ? ? ?*** ?Queue或Stack:需要一個序列列表,其中的元素在檢索后放棄.否則,用其它集合. ?
? ? ? ? ?*** ?Queue或Stack:按一定的順序訪問這些元素(先進先出,后進先出),如果隨機,用其它集合. ?
? ? ? ? ?*** ?是否通過索引訪問每一個元素? ?
? ? ? ? ? ? ? ? ?* ?ArrayList和StringCollection ?提供通過元素的從零開始的*索引*對其元素進行訪問. ?
? ? ? ? ? ? ? ? ?* ?(Hashtable) ?(SortedList) ?(ListDictionary) ?(StringDictionary) ?提供通過元素的*鍵*對其元素進行訪問 ?
? ? ? ? ? ? ? ? ?* ?(NameObjectCollectionBase) ?和 ?(NameValueCollection) ?提供或者通過元素的從零開始的*索引*或者通過元素的*鍵*對其元素進行訪問. ?
? ? ? ? ?*** ?每一元素將包含一個值/一個值和一個鍵的組合還是一個鍵和多個值的組合? ?
? ? ? ? ? ? ? ? ?* ?一個值: ?使用基于 ?IList ?的任何集合 ?
? ? ? ? ? ? ? ? ?* ?一個鍵和一個值: ?使用基于 ?IDictionary ?的任何集合. ?
? ? ? ? ? ? ? ? ?* ?一個鍵和多個值: ?使用 ?System.Collections.Specialized ?命名空間中的 ?NameValueCollection ?類. ?
? ? ? ? ?*** ?是否需要用與元素方式不同的方式對元素排序? ?
? ? ? ? ? ? ? ? ?* ?Hashtable ?通過鍵的哈希代碼對元素進行排序. ?
? ? ? ? ? ? ? ? ?* ?SortedList ?基于 ?IComparer ?實現,通過鍵對元素進行排序. ?
? ? ? ? ? ? ? ? ?* ?ArrayList ?提供 ?Sort方法該方法將 ?IComparer ?實現作為一個參數采用. ?
? ? ? ? ?*** ?是否需要信息的快速搜索和檢索? ?
? ? ? ? ? ? ? ? ?* ?對于小集合(十項或更少),ListDictionary ?快于 ?Hashtable. ?
? ? ? ? ?*** ?是否需要只接受字符串的集合? ?
? ? ? ? ? ? ? ? ?* ?StringCollection ?(基于 ?IList) ?和 ?StringDictionary ?(基于 ?IDictionary) ?位于 ?System.Collections.Specialized ?命名空間中.
總結
以上是生活随笔為你收集整理的.Net各种集合类型的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【信息汇总】武汉大学计算机考研
- 下一篇: JS 数组转树状结构