c#-集合-ArrayList、List、Stack、Queue、Hashtable、Diction

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

集合:ArrayList、ListT、Stack、Queue、Hashtable、DictionaryTKey,Tvalue一.概述:刚接触C#时,让数据放在一起是用的数组存放的方式,数组可以很方便的存放以及调用该数据。后来有个项目【21点】,那么扑克牌若是用数组存放的话不太方便,一副扑克牌,当发了一张牌之后,那么这副牌就会少一张,这可不是废话!用数组存这一副牌将会非常麻烦,不可能每发一张牌都new一个新数组,把这张牌去掉后数组的值付给新数组,那么,以队列(Queue)为例解决此问题比较好,首先队列有先进先出的特点,把一副牌打乱顺序后存在队列中,每发一张牌,队列中就会少一个元素,这正好符合发牌这一现实情况。队列属于集合,谈到集合,首先想到集合中元素数和集合可容纳元素数这两个概念,在C#中集合有很多种,现以ArrayList、ListT、Stack、Queue、Hashtable、DictionaryTKey,Tvalue为代表总结一下。二.精华:1.数组和集合的关系:集合内有个数组,数组更接近底层,数组不能称之为集合。2.集合查看元素数用:Count,数组查看元素数:Length。三.ArrayList和ListT1.ArrayList:a.它被称为“动态数组”,这个称号反应了它的最大的特点:随着向ArrayList中添加元素,其容量通过重新分配按需自动增加。其增加方式2倍递增。在使用构造函数publicArrayList()时,其容量默认为0,若添加元素后,为4,然后依次2倍递增;在使用构造函数publicArrayList(intcapacity)时,其容量默认为capacityb.添加元素:ArrayList添加元素必须用Add(objectvalue)方法:ArrayListal=newArrayList();al.Add(1);al[0]=2;Console.WriteLine(al[0].ToString());//结果:2由上面的代码可看出其索引器作用是:修改和查看,若用索引器去做Add(objectvalue)的事,会发生System.ArgumentOutOfRangeException异常:引索超出范围,必须为非负值,并小于集合大小。所以使用其索引器,必须在添加元素后。c.ArrayList常用方法:Add将对象添加到ArrayList的结尾处。Clear从ArrayList中移除所有元素。Contains确定某元素是否在ArrayList中。Insert将元素插入ArrayList的指定索引处。Remove从ArrayList中移除特定对象的第一个匹配项。Reverse将整个ArrayList中元素的顺序反转。Sort对整个ArrayList中的元素进行排序。ToArray将ArrayList的元素复制到新Object数组中。d.ArrayList的缺点:在ArrayList内部维护着一个object数组,被称为“动态数组”就是因为这个object数组是动态操作的,在使用构造函数publicArrayList()时,object数组的大小为0,当Add(objectvalue)方法后,object数组的大小为4,当Add(objectvalue)方法添加了4个元素,要添加第5个元素时,object数组的大小为8,依次类推。object数组的大小从4变到8,发生一个操作:new了一个新object[8]数组,然后遍历把旧的object[4]数组的值付给新数组,也就是说ArrayList.Capacity变化一次,这种遍历赋值就会发生一次。说了怎么多,并不是ArrayList最致命的缺点:Add(objectvalue)方法的参数是object类型的,所以每次在添加元素时,都会发生装箱(针对于值类型而言)或类型转换(针对于引用类型而言),在每次调用的时候,会发生拆箱(针对于值类型而言)或类型转换(针对于引用类型而言)。对于性能大大地减低了,一个程序的性能不好,那么它的质量就不被认可,但是ArrayList又有诸多好处,有什么办法可以弥补这一缺点吗?有!它就是ListT。2.ListT:ListT和ArrayList成对出现,既然如此,ListT的内部和功能与ArrayList相差不多,ListT就是为弥补ArrayList缺点而生的,参数T是一个数据类型,可以是自定义,也可以是内置类型,所以从根本上解决了装箱、拆箱和类型转换的问题。其他特性和ArrayList一样。看到了吧,当参数T一旦定义,那么以后的所有的参数都是该数据类型。四.Stack和StackT、Queue和QueueT如果ArrayList和ListT理解之后,那么集合已经走入了你的世界,下面是开眼界的时刻:1.栈:Stack和StackTa.特点:先进后出b.主要方法:Push将对象插入Stack的顶部。Pop移除并返回位于Stack顶部的对象。Peek返回位于Stack顶部的对象但不将其移除。Clear从Stack中移除所有对象。c.Stack的缺点与StackT:同样的,Stack.Push(objectobj)的参数类型为object类型,会发生装箱、拆箱和类型转换的问题,StackT就是为解决此问题而生的。2.队列:Queue和QueueTa.特点:先进先出b.主要方法:Enqueue将对象添加到Queue的结尾处。Dequeue移除并返回位于Queue开始处的对象。Peek返回位于Queue开始处的对象但不将其移除。Clear从Queue中移除所有对象。c.Queue的缺点与QueueT:一句话:QueueT就是为解决“此问题”而生的。d.举个例子理解栈和队列:栈:包子店做包子的时候,在蒸锅上会有很多笼,那么最先放下的那一笼在最底层,最后放的那一笼在最上层,包子熟了,最先端下来的是最后放的那一笼,也就是最上面的那一笼;最后端的那一笼是最先放的那一笼,也就是最下面的那一笼。最先端的是最后放的,最后端的是最先放的:先进后出,后进先出!队列:火车站买票,先排队的最先买,后排队的最后买,插队的除外!:先进先出,后进后出!五.Hashtable和DictionaryTKey,Tvalue它们的特点是:设置一个唯一的键和对应该键的值,然后在通过该键获得该值。简单的说就是“你给我键,我给你值”。有两个属性很常用:获得所有的键和查看Keys获取包含Hashtable中的键的ICollection。Values获取包含Hashtable中的值的ICollection。其方法和其他集合大同小异,在这里就不说了。六.C#中的千万种集合:集合千万种,方法就一种:根据VisualStudio可视化工具强大的提示功能,了解遇到的集合及其方法。

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功