【C#】数组与集合(LIst、ArrayList、HashTable、Dictionary)

时间:2022-05-06 05:21:09

      可C#视频马上就接近尾声了,C#语言是我们今后进行项目开发的最主要的最常用的语言之一。这个阶段的C#学习要求中数组\集合是要掌握的重点之一。由于我本身也还没有学的很透彻,所以有什么错误给我留言,大家共同进步!下面就先介绍集合,到目前为止我们学了4中,分别是:列表,数组列表,哈希表和字典。

集合(介绍四种):

    集合,表示可以通过遍历每个元素来访问的一组对象(特别是foreach循环访问), 别一个集合包括多个元素,即一个集合类对象和N个元素对象。任何集合类对象都能通过GetEnumerator()方法来返回一个可以实现IEnumerator接口的对象,可以遍历访问集合类对象中的每一个元素对象。

  List   :   表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索、排序和操作的方法。

       Dictionary表示键和值的集合。Dictionary遍历输出的顺序,就是加入的顺序,这点与Hashtable不同 

       ArrayList :一个动态数组类型可以说是数组的复杂版本。ArrayList 类提供在大多数 Collections 类中提供但不在 Array 类中提供的一些功能。

       HashTable  哈希表,名-值对。类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先散列过。如果以任意类型键值访问其中元素会快于其他集合。

          List和Dictionary是泛型集合类,可以通过遍可以以在编译阶段告诉编译器,元素的类型。因为非泛型集合ArrayList和HashTable用Add添加时,要 传入的是Object类型,而我们把int类型等集合,表示可以通过遍历每个元素来访问的一组对象(特别是foreach循环访问),一个集合包括多个元素,即一个集合类对象和N个元素对象。任何集合类对象都能通过GetEnumerator()方法来返回一个可以实现IEnumerator接口的对象,通过这个对下你给,可以遍历访问集合类对象中的每一个元素对象。的参数传入时,会发生装箱(将int这种值类型赋值给object这种引用类型,即发生装箱,拆箱则是引用类型赋值给值类型)。装箱拆箱操作极大的破环程序的性能,不过在Net2.0中提供了泛型集合类,所以完全可以用List<T> 和Dictionary<Tkey,Tvalue> 来代替 原来1.0中的ArrayList和HashTable,即使是List<Object>也会比ArrayList的性能要好。

          ArrayList和HashTable是非泛型集合类,访问ArrayList需要使用索引访问,如果数据过多,变化很大的话则非常难以跟踪对象的索引值,所以在ArrayList上添加了HashTable,使用函数传递的key来检索对应位置,然后可以方便的操作对应的对象。 HashTable不能包含重复的key,如果调用Add方法来添加一个Keys数组中已经有的Key,就会抛出异常----------除非使用方括号添加一对Key/value。为了测试HashTable中是否包含一个特定的key,可以使用COntainsKey方法

一张图来诠释--------------------------两两之间的异同之处

【C#】数组与集合(LIst、ArrayList、HashTable、Dictionary)   

数组

             集合可以看做是“长度可变,具有很多方法的数组”, 是具有同一类型的多个对象的集合,是一种数据结构,包含同一类型的多个元素

   1、数组是固定大小的,不能伸缩,虽然System.Array.Reasize这个泛型方法可以重置数组大小,但是该方法是重新创建设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃,而集合却是可变长的。

   2、数组要声明元素的类型,集合类的元素类型却是object

   3、数组可读可写不能声明,只读数组。集合类却可以提供ReadOnly方法以只读方式使用集合

   4、数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不适用下标访问,很多时候集合有定制的下标类型,对于队列和栈根本不支持下标访问。