C#高级(九)C#数据结构 , 集合
一、集合的基本概念
在.NET中,对于数据结构的支持,即把许多类似的对象组合起来。最简单的数据结构就是数组。
集合表示一组可以通过遍历每个元素来访问的的一组对象,特别是可以使用foreach循环来访问他们。对象如果可以提供相关对象的引用,就是一个集合。称为
使用foreach循环是集合的主要目的,集合没有提供其他特性。
二、数组列表。
数组列表类似数组,但数组列表是可以增大的。数组在规定的大小后,就不可以再增加了,但数组列表可以。
比如 ArrayList arrayListTest=new ArraryList(10); 该句创建了一个大小为10的ArraryList对象,当我们再为其添加第11项时,其容量会自动扩大1倍,也就变成了20,而原来的对象会被添加上垃圾收集器的标记。
为其添加对象的方法是 .Add()
比如:arrayListTest.Add(“www.gosoa.com.cn”);
我们来完整的看个例子。


using …System;
using System.Collections;
namespace www.gosoa.com.cn 
…{
class Test 
…{
static void Main() 
…{
ArrayList arrayTest = new ArrayList(4);
arrayTest.Add(“www.”);
arrayTest.Add(“gosoa.”);
arrayTest.Add(“com.”);
arrayTest.Add(“cn”);
foreach(string item in arrayTest)
…{
Console.Write(item);
}
Console.WriteLine(“\n”+arrayTest.Capacity.ToString());
arrayTest.Add(“url”);
Console.WriteLine(arrayTest.Capacity.ToString());
}
}
}
注意,在使用ArrayList之前,要引入System.Collections 这个命名空间。
在本例中,ArrayList arrayTest = new ArrayList(4); 我们定义了一个容量为4的ArrayList实例,然后给其添加了4个选项,并且最后打印了出来。arrayTest.Capacity 是用来输出ArrayList容量的。上例中 输出的结果是
4
8
为什么最后输出的是8呢?因为起初定义的arrayTest 容量是4,当最后arrayTest.Add(“url”);的时候,已经是在添加第五个选项了,这时,arrayTest的容量就会增加一倍。
ArrayList还有Insert(), RemoveAt(),AddRange(),RemoveRange()方法。
我们来以例子学习。


using …System;
using System.Collections;
namespace www.gosoa.com.cn 
…{
class Test 
…{
static void Main() 
…{
ArrayList arrayTest = new ArrayList(4);
arrayTest.Add(“www.”);
arrayTest.Add(“gosoa.”);
arrayTest.Add(“com.”);
arrayTest.Add(“cn”);
foreach
t>(string item in arrayTest) 
…{
Console.Write(item);
}
Console.WriteLine(“\n \n”);
//此时输出
// www.www.gosoa.com.cn
//在第一个选项前面插入一项
arrayTest.Insert(0,“http://”);
foreach(string item in arrayTest) 
…{
Console.Write(item);
}
Console.WriteLine(“\n \n”);
//添加个http后 输出 如下
// http://www.www.gosoa.com.cn
//新建立一个字符串数组
string [] stringArr=new string[4];
stringArr[0]=“\n”;
stringArr[1]=“www.”;
stringArr[2]=“cnblogs.”;
stringArr[3]=“com”;
//将整个字符串数组添加进arrayTest
arrayTest.AddRange(stringArr);
foreach(string item in arrayTest) 
…{
Console.Write(item);
}
Console.WriteLine(“\n \n”);
//添加进 字符串 数组后 输出结果如下
// http://www.www.gosoa.com.cn
// www.cnblogs.com
//从arrayTest的第四项开始,删除4个选项
arrayTest.RemoveRange(4,4);
foreach(string item in arrayTest) 
…{
Console.Write(item);
}
//删除后输出的就只是 http://www.www.gosoa.com.cn 了。
}
}
}
在上例中 ,注释已经非常明确了。如果还有不明白的,可以留言给我。
三、Stack 类(栈)
栈是另外一种集合。适合于处理应用程序使用完后就删除的临时数据项。
在栈里,存储和取出的顺序是 先进后出,或者说 后进先出。
在stack里面,元素是使用Push()方法放入栈,使用Pop()方法弹出栈外。我们来看个例子。


using …System;
using System.Collections;
namespace www.gosoa.com.cn 
…{
class Test 
…{
static void Main() 
…{
Stack stackTest = new Stack();
//注意这里添加的顺序。
stackTest.Push(“cn”);
stackTest.Push(“com.”);
stackTest.Push(“gosoa.”);
stackTest.Push(“www.”);
foreach(string item in stackTest) 
…{
Console.Write(item);
}
Console.WriteLine(“\n \n”);
//此时输出 www.www.gosoa.com.cn 并非 cncom.gosoa.www
stackTest.Pop();
foreach(string item in stackTest) 
…{
Console.Write(item);
}
//此时输出 www.gosoa.com.cn
}
}
}
在上例中,展示了怎样使用Push()和Pop()方法。但要注意,push的顺序。
而且在调用Pop()方法后,是删除了最后push()的那个元素。所以输出了 www.gosoa.com.cn
四、Queue类。
和Stack类似,只是Queue先进先出,后进后出。与Stack相反。例子和上面的一样,只需稍做修改。
Queue使用 Enqueue 添加元素,使用Dequeue 删除元素


using …System;
using System.Collections;
namespace www.gosoa.com.cn 
…{
class Test 
…{
static void Main() 
…{
Queue queueTest = new Queue();
//注意这里添加的顺序。
queueTest.Enqueue(“cn”);
queueTest.Enqueue(“com.”);
queueTest.Enqueue(“gosoa.”);
queueTest.Enqueue(“www.”);
foreach(
olor=#0000ff>string item in queueTest) 
…{
Console.Write(item);
}
Console.WriteLine(“\n \n”);
//此时输出 cncom.gosoa.www 并非 www.www.gosoa.com.cn
queueTest.Dequeue();
foreach(string item in queueTest) 
…{
Console.Write(item);
}
//此时输出 com.gosoa.www
}
}
}
