为什么有了数组,还要出现集合?因为,数组有严重的局限性。首先,数组元素的数据类型必须是相同的,其次,在创建数组时必须知道有多少个元素,对应用程序来说,还要通过循环索引来访问这些元素。因此,数组并不是最方便的数据结构。所以,集合出现了,集合来管理数据将更为方便。
集合
概念
集合是通过高度结构化的方式存储任意对象的类,与无法动态调整大小的数组相比,集合不仅能随意调整大小,而且对存储或检索存在其中的对象提供了更高级的方法。集合可以把一组类似的类型化对象组合在一起。
集合类
.NET Framework的集合类可分为3种类型
- 常用集合
集合 |
含义 |
Array |
数组 |
List |
列表 |
ArrayList |
动态数组 |
Hashtable |
哈希表 |
Dictionary |
字典(键/值对集合) |
Queue |
队列 |
Stack |
栈 |
SortedList |
有序建/值对列表 |
LinkedList |
双向链表 |
SortedDictionary |
有序字典 |
2.位集合
位集合包括BitArray和BitVector32。
BitArray
- BitArray是一个集合类,该类中的容量始终与计数相同
- BitArray类提供一些杂其他集合中未提供的方法,包括允许使用筛选器一次修改多个元素,如And、Or、Xor、Not和SetAll
BitVector32
BitVector32是一个结构型,提供与BitArray同样的功能。它们的主要区别如下。
- lBitArray是引用类型,在堆中分配内存,而BitVector32是值类型,在堆栈上分配,因此BitVector32的性能更高。
- BitVector32可存储正好32位的数据,而BitArray可存储可变的位数。BitVector32既可存储位标志,又可存储小整数,因此很适合存储不向用户公开的数据。但是,如果所需位标志的数目未知、可变或大于32,则可用BitArray取代。
- BitVector32位于System.Collections.Specialized命名空间中,BitArray位于System.Collections命名空间中。
3. 专用集合
专用集合通常用于处理特定的元素类型,包括StringCollection、StringDictionary和NameValueCollection等。
动态数组类ArrayList
ArrayList类提供多数System.Collections类都提供的功能,但这些功能在数组(Array)类中没有提供。可以将ArrayList看成扩充了功能的数组,但ArrayList不等同于数组。
动态数组类ArrayList与数组类Array的主要区别如下。
Array |
ArrayList |
大小固定 |
大小可根据需要自动扩充 |
一次只能获取或设置一个元素的值 |
允许添加、插入或移除某一范围的元素 |
下限可以自定义 |
下限始终为零 |
具有多个维度 |
始终是一维的 |
位于System命名空间中 |
位于System.Collections命名空间中 |
HashTable(哈希表)
HashTable通常称为哈希表,它表示键/值对的集合,这些键/值对根据键的哈希代码进行组织。它的每个元素都是一个存储在字典实体对象中的键/值对。键不能空引用,但值可以。也就是说HashTable像一个字典,根据键可以查找到相应的值。