C#高级(九)C#数据结构 , 集合

来源:互联网 发布:韩国健美81号seo rina 编辑:程序博客网 时间:2024/04/29 05:13

一、集合的基本概念

.NET中,对于数据结构的支持,即把许多类似的对象组合起来。最简单的数据结构就是数组。

集合表示一组可以通过遍历每个元素来访问的的一组对象,特别是可以使用foreach循环来访问他们。对象如果可以提供相关对象的引用,就是一个集合。称为

使用foreach循环是集合的主要目的,集合没有提供其他特性。

二、数组列表。

数组列表类似数组,但数组列表是可以增大的。数组在规定的大小后,就不可以再增加了,但数组列表可以。

比如 ArrayList arrayListTest=newArraryList(10); 该句创建了一个大小为10ArraryList对象,当我们再为其添加第11项时,其容量会自动扩大1倍,也就变成了20,而原来的对象会被添加上垃圾收集器的标记。

为其添加对象的方法是 .Add()

比如:arrayListTest.Add(“gosoa.com.cn”);

              我们来完整的看个例子。

  1. using System;
  2. using System.Collections;
  3. namespace gosoa.com.cn
  4. {    
  5.         class Test
  6.         {
  7.             static void Main()
  8.             {
  9.                 ArrayList arrayTest = new ArrayList(4);
  10.                 arrayTest.Add("www.");
  11.                 arrayTest.Add("gosoa.");
  12.                 arrayTest.Add("com.");
  13.                 arrayTest.Add("cn");
  14.                 foreach(string item in arrayTest)
  15.                 {
  16.                         Console.Write(item);
  17.                 }
  18.                 Console.WriteLine("/n"+arrayTest.Capacity.ToString());
  19.                 arrayTest.Add("url");
  20.                 Console.WriteLine(arrayTest.Capacity.ToString());
  21.             }
  22.         }
  23. }

 

注意,在使用ArrayList之前,要引入System.Collections 这个命名空间。

在本例中,ArrayList arrayTest = new ArrayList(4); 我们定义了一个容量为4ArrayList实例,然后给其添加了4个选项,并且最后打印了出来。arrayTest.Capacity 是用来输出ArrayList容量的。上例中 输出的结果是

www.gosoa.com.cn

4

8

 

为什么最后输出的是8呢?因为起初定义的arrayTest容量是4,当最后arrayTest.Add("url");的时候,已经是在添加第五个选项了,这时,arrayTest的容量就会增加一倍。

       ArrayList还有Insert(),RemoveAt(),AddRange(),RemoveRange()方法。

我们来以例子学习。

       

  1. using System;
  2. using System.Collections;
  3. namespace gosoa.com.cn
  4. {    
  5.         class Test
  6.         {
  7.             static void Main()
  8.             {
  9.                 ArrayList arrayTest = new ArrayList(4);
  10.                 arrayTest.Add("www.");
  11.                 arrayTest.Add("gosoa.");
  12.                 arrayTest.Add("com.");
  13.                 arrayTest.Add("cn");                
  14.                 foreach(string item in arrayTest)
  15.                 {
  16.                         Console.Write(item);
  17.                 }
  18.                 Console.WriteLine("/n /n");
  19.                 //此时输出 
  20.                 // www.gosoa.com.cn
  21.                 
  22.                 //在第一个选项前面插入一项
  23.                 arrayTest.Insert(0,"http://");
  24.                 foreach(string item in arrayTest)
  25.                 {
  26.                         Console.Write(item);
  27.                 }
  28.                 Console.WriteLine("/n /n");
  29.                 //添加个http后 输出 如下
  30.                 // http://www.gosoa.com.cn              
  31.                 //新建立一个字符串数组
  32.                 string [] stringArr=new string[4];
  33.                 stringArr[0]="/n";
  34.                 stringArr[1]="www.";
  35.                 stringArr[2]="cnblogs.";
  36.                 stringArr[3]="com";
  37.                 
  38.                 //将整个字符串数组添加进arrayTest
  39.                 arrayTest.AddRange(stringArr);
  40.                 foreach(string item in arrayTest)
  41.                 {
  42.                         Console.Write(item);
  43.                 }
  44.                 Console.WriteLine("/n /n");
  45.                 //添加进 字符串 数组后 输出结果如下 
  46.                 // http://www.gosoa.com.cn
  47.                 // www.cnblogs.com
  48.                 //从arrayTest的第四项开始,删除4个选项
  49.                 arrayTest.RemoveRange(4,4);
  50.                 foreach(string item in arrayTest)
  51.                 {
  52.                         Console.Write(item);
  53.                 }               
  54.                 //删除后输出的就只是   http://www.gosoa.com.cn 了。
  55.             }
  56.         }
  57. }

 

在上例中 ,注释已经非常明确了。如果还有不明白的,可以留言给我。

 

三、Stack 类(栈)

       栈是另外一种集合。适合于处理应用程序使用完后就删除的临时数据项。

       在栈里,存储和取出的顺序是 先进后出,或者说 后进先出。

       stack里面,元素是使用Push()方法放入栈,使用Pop()方法弹出栈外。我们来看个例子。

 

  1. using System;
  2. using System.Collections;
  3. namespace gosoa.com.cn
  4. {    
  5.         class Test
  6.         {
  7.             static void Main()
  8.             {
  9.                 Stack stackTest = new Stack();
  10.                 //注意这里添加的顺序。
  11.                 stackTest.Push("cn");   
  12.                 stackTest.Push("com.");
  13.                 stackTest.Push("gosoa.");
  14.                 stackTest.Push("www.");
  15.                 foreach(string item in stackTest)
  16.                 {
  17.                         Console.Write(item);
  18.                 }
  19.                 Console.WriteLine("/n /n");
  20.                 //此时输出 www.gosoa.com.cn 并非 cncom.gosoa.www
  21.                 stackTest.Pop();
  22.                 foreach(string item in stackTest)
  23.                 {
  24.                         Console.Write(item);
  25.                 }
  26.                 //此时输出 gosoa.com.cn 
  27.             }
  28.         }
  29. }

 

在上例中,展示了怎样使用Push()Pop()方法。但要注意,push的顺序。

而且在调用Pop()方法后,是删除了最后push()的那个元素。所以输出了 gosoa.com.cn

 

四、Queue类。

       Stack类似,只是Queue先进先出,后进后出。与Stack相反。例子和上面的一样,只需稍做修改。

 

  1. using System;
  2. using System.Collections;
  3. namespace gosoa.com.cn
  4. {    
  5.         class Test
  6.         {
  7.             static void Main()
  8.             {
  9.                 Queue queueTest = new Queue();
  10.                 //注意这里添加的顺序。
  11.                 queueTest.Enqueue("cn");    
  12.                 queueTest.Enqueue("com.");
  13.                 queueTest.Enqueue("gosoa.");
  14.                 queueTest.Enqueue("www.");
  15.                 foreach(string item in queueTest)
  16.                 {
  17.                         Console.Write(item);
  18.                 }
  19.                 Console.WriteLine("/n /n");
  20.                 //此时输出  cncom.gosoa.www 并非 www.gosoa.com.cn 
  21.                 queueTest.Dequeue();
  22.                 foreach(string item in queueTest)
  23.                 {
  24.                         Console.Write(item);
  25.                 }
  26.                 //此时输出 com.gosoa.www 
  27.             }
  28.         }
  29. }

Queue使用Enqueue 添加元素,使用Dequeue 删除元素。