常用的集合类:ArrayList,Queue,Stack,SortedList,Hashtable
数组:
- Array:
- 数据存储在连续的内存上。
- 数组的语速都是同类型的。
- 数组可以通过下标访问
- ArrayList
- 不必声明指定时的长度
- 可以存储不用类型的元素
- ArrayList是类型不安全的。
- 数组存储值类型是会发生装箱拆箱操作,因此会产生额外的性能开销,导致性能下降。
List
- 确保了类型安全
- 取消了装箱和拆箱操作
- 融合了Array可以快速访问的特点
数组适合数据的数量又上线,且需要快速访问其元素内容的情况。
链表适合元素数量不固定且需要经常增删结点的情况。
一、ArrayList
特点:有序的对象列表、大小不固定、按照索引访问。
1.当存储容量不足时,按照2的幂次规律扩容;
2.可以存储不同类型的元素
ArrayList list =new ArrayList();
//使用foreach进行遍历
foreach(int num inlist)
{
Console.WriteLine(num+” “);
}
//或者使用for循环和索引来进行遍历
for(int i;i<list.Count;i++)
{
Console.WriteLine(list[i]+” “);
}
注意:ArrayList的Capacity属性表示容量,而Count属性表示其中容纳元素的实际数目。
二、Queue
特点:先进先出的对象集合(FIFO)。
遍历方法:
Queue q=new Queue();
IEnumerator myEnumerat = q.GetEnumerator();//获取能循环访问队列枚举数的IEnumerator接口实例
while(myEnumerator.MoveNext())
{
Console.Write(myEnumerator.Current+” “);
}
注意:
当Queue内容发生变化时,需要重新获取IEnumerator接口实例。
三、Stack
特点:先进后出的对象集合(LIFO)。
遍历方法:同Queue遍历方法
四、SortedList
特点:键/值对的集合,存入的元素会自动按照键排序,可以按照键或者索引访问
Hashtable(key,object)元素的集合,按照键的哈希代码组织,通过key可以访问到指定的元素。
Hashtable ht=new Hashtable();
//获取键:
foreach(string key in ht.Keys)
{
Console.Write(key+” \t“);
}
//获取值:
foreach(string value in ht.Values)
{
Console.Write(value+”\t “);
}
//如果希望同时获得键和值,可以根据Hashtable的元素类型为DictionaryEntry来获得。
foreach(DictionaryEntry de in ht)
{
Console.WriteLine(“\t{0} \t{1}”,de.Key,de.Value);
}