c# 集合类:ArrayList,StringCollection,Hashtable,List

    技术2022-05-20  56

    1.数组集合

    其实,在数组的一节里面已经包含了这个概念了。其实数组集合就是 new int[2];

    官方参考地址:http://msdn.microsoft.com/zh-cn/library/57yac89c(VS.80).aspx

    2.ArrayList

    ArrayList跟数组(Array)的区别:http://msdn.microsoft.com/zh-cn/library/41107z8a(VS.80).aspx

    实例:

    using  System; using  System.Collections.Generic; using  System.Linq; using  System.Text; using  System.Collections; namespace  CSharp {      public   class  TestArrayList     {          public  TestArrayList()         {              //  Create an empty ArrayList, and add some elements.             ArrayList stringList  =   new  ArrayList();             stringList.Add( " a " );             stringList.Add( " abc " );             stringList.Add( " abcdef " );             stringList.Add( " abcdefg " );             stringList.Add( 20 );              //  索引或者说数组下标是数字,所以不需要名字.             Console.WriteLine( " Element {0} is / " { 1 }/ "" 2 , stringList[ 2 ]);              //  给下标为2的元素赋值             stringList[ 2 =   " abcd " ;             Console.WriteLine( " Element {0} is / " { 1 }/ "" 2 , stringList[ 2 ]);              //  输出stringList的总的元素个素             Console.WriteLine( " Number of elements in the list: {0} " ,                 stringList.Count);              try             {                  // 数组下标从0到count-1,如果尝试输出小于0或者大于等于count的下标,将抛出异常。                 Console.WriteLine( " Element {0} is / " { 1 }/ "" ,                     stringList.Count, stringList[stringList.Count]);             }              catch  (ArgumentOutOfRangeException aoore)             {                 Console.WriteLine( " stringList({0}) is out of range(越界). " ,                     stringList.Count);             }              //  不能使用这种方式来增加元素,只能通过stringList.add("aa")来增加元素              try             {                 stringList[stringList.Count]  =   " 42 " ;             }              catch  (ArgumentOutOfRangeException aoore)             {                 Console.WriteLine( " stringList({0}) is out of range(越界). " ,                     stringList.Count);             }             Console.WriteLine();              // 用for来循环              for  ( int  i  =   0 ; i  <  stringList.Count; i ++ )             {                 Console.WriteLine( " Element {0} is / " { 1 }/ "" , i,                     stringList[i]);             }             Console.WriteLine();              // 用foreach来循环              foreach  ( object  o  in  stringList)             {                 Console.WriteLine(o);             }             Console.ReadLine();         }     } }

     

    这里同时要提到StringCollection,其实这个跟ArrayList没啥区别,只不过StringCollection只能接收字符类型的东西。

    官方地址:http://msdn.microsoft.com/zh-cn/library/system.collections.specialized.stringcollection(VS.80).aspx 3.List<T> ,这个我想才是我们最常用的。 官方参考地址:http://msdn.microsoft.com/zh-cn/library/6sh2ey19(VS.80).aspx

    这个其实就是泛型结合数组的例子。

    Code using  System; using  System.Collections.Generic; using  System.Linq; using  System.Text; namespace  CSharp {      public   class  TestList     {          // 默认构造函数          public  TestList()         {              // 声明语法,换句话说就是:定义objAppleList - 集合变量的语法。             List < Apple >  objAppleList  =   new  List < Apple > ();              // 定义3个Apple类的实例(也叫对象)             Apple objApple1  =   new  Apple();             objApple1.Color  =   " red " ;             objApple1.Weight  =   10 ;             Apple objApple2  =   new  Apple();             objApple2.Color  =   " green " ;             objApple2.Weight  =   12 ;             Apple objApple3  =   new  Apple();             objApple3.Color  =   " black " ;             objApple3.Weight  =   8 ;              // 把3个Apple类的实例 干到 objAppleList里面去。             objAppleList.Add(objApple1);             objAppleList.Add(objApple2);             objAppleList.Add(objApple3);              // 遍历objAppleList这个集合.              foreach  (Apple o  in  objAppleList)             {                 Console.WriteLine( " Color is {0},Weight is {1} " , o.Color, o.Weight);             }              // 总的个数:             Console.WriteLine( " objAppleList的总个数是:{0} " , objAppleList.Count);             Console.ReadLine();         }     }      public   class  Apple     {          // 定义字段          private   string  _color  =   "" ;          private   decimal  _weight  =   0 ;          // 定义跟字段对应的属性          public   string  Color         {              get  {  return  _color; }              set  { _color  =  value; }  // 这里的value是C#关键字。表示外面传入的值.         }          public   decimal  Weight         {              get  {  return  _weight; }              set  { _weight  =  value; }         }     } }

     

    在这里:List < Apple >  objAppleList  =   new  List < Apple > ();,其实我们用数组也可以,如:Apple[] objAappArray = new Apple[3]; 但是数组的限制就是固定了大小。不能动态增加。

    这里为什么不用ArrayList? 按道理,用ArrayList也可以,如:

    Code ArrayList obAppleArrayList  =   new  ArrayList();             obAppleArrayList.Add(objApple1);             obAppleArrayList.Add(objApple2);             obAppleArrayList.Add(objApple2);

    我们不用的ArrayList的目的是保证类型安全。因为这个时候,你还可以 obAppleArrayList.Add("string");, obAppleArrayList.Add("heihei");,这样 obAppleArrayList的元素就不是单纯的Apple类了。

    我们最常用的也是List<T>.

    4.Hashtable, 官方地址:http://msdn.microsoft.com/zh-cn/library/system.collections.hashtable(VS.80).aspx

    实例:

    Code using  System; using  System.Collections.Generic; using  System.Linq; using  System.Text; using  System.Collections; namespace  CSharp {      public   class  TestHashtable     {          public  TestHashtable()         {             Hashtable objHashtable  =   new  Hashtable();                           // 需要注意的是:这里的add有点不同于ArrayList,这里需要指定两个值,一个是key,一个value.              // 而且必须都是Object             objHashtable.Add( " Key " " Value " );             objHashtable.Add( 1 2 );             objHashtable.Add( 2.1 3.2 );              // 获取所有的key             ICollection keys  =  objHashtable.Keys;              foreach  ( object  key  in  keys)             {                 Console.WriteLine( " Key is {0},Values is {1} " ,key,objHashtable[key]);             }             Console.WriteLine();              // 换一种遍历方式:              foreach  (DictionaryEntry de  in  objHashtable )             {                 Console.WriteLine( " Key is {0},Values is {1} " , de.Key, de.Value);             }             Console.ReadLine();         }     } }


    最新回复(0)