数组和集合

来源:互联网 发布:ubuntu如何打开u盘 编辑:程序博客网 时间:2024/04/29 18:49
数组是包含一组类型相同的多个数据结构,可以通过数组的索引来访问数组的变量。语法:数据类型 [] 数组名=new 数组类型[数组长度];
 数组实例:
string[] name=new string[4];
name[0]="张三";
name[1]="李四";
name[2]="王五";
name[3]="赵六";
 除了数组以外,C#中还有四种存放数据的集合:ArrayList、Hashtable以及它俩对应的泛型版集合。
 集合是组合在一起的数据组,是组合在一起的类型化数据对象,数组是最基本、最常用的集合。数组的长度是固定的,定义时就已经给定了数组的最大长度,并且数组内的元素的类型都是一致的,并不是
什么数据类型都能存放的,而集合是可变长度的数组,能提高内存的使用率,并且可以存放多种数据类型。ArrayList是一种大小可按需动态分配的数组,定义ArrayList语法如下:
ArrayList lst=new ArrayList ();  或 ArrayList lst=new ArrayList (5); 
使用Add方法可以添加object类型的数据,即C#支持的数据类型。ArrayList的最大特点就是长度可自动收缩或扩展。并且可以存放任意的数据类型,但是在取数据的时候需要数据类型转换。
  Hashtable  数组和ArrayList是按照索引,也就是下标号来访问其中的元素的,但如果集合中的元素位置频繁变化,那么再用这种方式访问元素就显得很困难了,Hashtable就解决了这个问题,它是以
键/值的方式存放数据的,键和值是一一对应的,键不能相同。语法:Hashtable   ht=new Hashtable  (); ht.Add(object key ,object Value);
从以上可以看出,Hashtable添加元素使用的也是Add方法,不过它需要两个参数,一个是键,另一个是值。两个参数的数据类型都是object类型,因此在取值时需要类型转换。
  从ArrayList和Hashtable可以看出,当从这两种集合中取值时都需要类型转换,这使得我们在写代码时很繁琐,那么有没有一中不用类型转换而直接取值的集合呢,这时候就出现了泛型的概念,和以上
两种集合对应的泛型集合分别是List和Dictionary,以下介绍这两种泛型集合。
  List<T>  定义语法:List<T>   lst=new List<T>(); 其中T代表集合元素的类型,从语法中不难理解,既然定义时就规定了数据类型,也就是说添加元素时必须是这个类型才能添加进去,所以在用Add
给List<T>  添加元素时必须符合定义时的数据类型。下面比较一下ArrayList和List<T>  的区别:
                                 不同点                                               相同点
  ArrayList          可以添加任何类型                                        通过索引访问元素
                     添加/访问元素需要拆/装箱                                添加方法相同 
  List<T>            对保存的对象类型约束                                    删除方法相同
                      添加/访问元素无需拆/装箱
  而Dictionary是Hashtable的泛型版,通过键/值取值,在存储数据时有类型的约束。
  需要说明的是,在使用ArrayList和Hashtable时需要引入System.Collections命名空间,而使用List<T>和Dictionary时需要引入System.Collections.Generic命名空间。