C#基础之集合(Collection)

来源:互联网 发布:淘宝买快排配件需注意 编辑:程序博客网 时间:2024/05/18 03:50

在C#编程中,我们经常会使用到集合,现在有时间,我来做一个整理。主要包括 ArrayList、Stack、Queue、HashTable、List<>。微软为什么要定义这么多集合类,而不只是去定义一个?因为每一种集合都只适合于某类问题的解决。下面我们将对这些集合的适用问题上进行讨论,说明集合的适用范围,本篇我们不做代码解释:

ArrayList集合

ArrayList类,使用大小可按需动态增加的数组。它其实是在内部维护着一个数组,在我们实例化一个ArrayList对象的时候,内部的数组长度是为0,当我们去添加元素的时候,ArrayList对象先会去判断内部的数组是否还可以添加元素,如果可以添加,则直接添加到数组的未尾。如果内部数组的元素己满,则会新创建一个数组,这个数组的长度是原来数组的2倍。然后再将元素添加进新数组!

这样的机制适合于什么情况呢?我们首先来说,集合的大小可按需动态增加。这就说明我们在存放不固定个数的对象时可以选用ArrayList集合。

Stack集合

Stack类,栈,表示对象的简单的后进先出非泛型集合。Push方法入栈,Pop方法出栈。学过数据结构,我们就知道,栈在内存中的表现形式是一个先进后出的集合。我们在往栈中压入元素的时候,只能先取出最后压入的元素。这样的集合适合哪种问题的解决呢?我们来举个简单的例子:我们在做一个记事本的时候如果想加入一个撤消操作的话。我们是不是就可以把每一个操作都存入在一个Stack集合中。然后在撤消的时候来一步一步的取中栈中元素来做相应的处理呢?

Queue集合

Queue类,队列,表示对象的先进先出集合。Enqueue方法入队列,Dequeue方法出队列。理解了Stack类,我们就不难理解Queue类。和Stack相反,队列是先进先出,在内存中表现形式,像一个管道 。只可以从一头进去,从另一头出来。这样我们取出的元素的顺序就和压入元素的顺利是保持一致的。那这样的集合适合于什么样的问题解决呢?再来举一个小例子:在网络上看电影的时候,会有一个缓冲过程。下载下来的数据存放在哪种集合比较适合呢?当然是Queue队列集合中了。因为我们在播放电影的时候会按照下载下来的数据依次进行播放。所以Queue在处理流的操作是非常适用的。

HashTable集合

HashTable就相当于一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;vlaue用于存储对应于key的值。每个元素都是一个存储在DictionaryEntry对象中的键值对。键不能为空引用,但值可以。当把某个元素添加到HashTable时,将根据键的哈希代码将元素放入存储桶中。该键的后续查找将使用键的哈希代码只在一个特定存储桶中搜索,这就大大减少为查找一个元素所需的键比较的次数。所以说,HashTable比较适合于查找次数比较多的问题解决。使用HashTable将大大减少比较次数。

HashTable的加载因子确定元素与存储桶的最大比率。加载因子越小,平均查找速度越快,但消耗的内存也增加。默认的加载因子1.0通常提供速度与大小之间的最佳平衡。当创建Hashtable时,也可以指定其他加载因子。

当向HashTable中添加元素时,HashTable的实际加载因子将增加。当实际加载因子达到指定的加载因子时,HashTable中存储桶的数目自动增加到大于当前HashTable存储桶两倍的最小质数。

List<>泛型集合

泛型的具体说明我先不在这里详细说明。具体的使用范围请大家到网上查找一些资料。如果有什么问题也可以提出

 

关于集合的种类还有很多,我就不一一说明。以后有时间再进行添加说明。

转载请注名:小`曲 @ CSDN

原创粉丝点击