集合是为了应对数组的大小固定的缺点而生的。如果元素个数是动态的,就应该使用集合类。下面将列出部分经常使用的集合的最佳使用情况:
ArrayList最适合用于变化的数据类型。
HashTable最适合用于经常查询的数据。
Queue提供了先进先出存储器,因此在需要按顺序排序的数据时应该使用该集合。
Stack提供了先进后出存储器,因此在需要按逆序排序的数据时应该使用该集合。
SortedList以有序的顺序存储键和值。这会使添加数据变得缓慢,因为需要重新安排已有的项,以确保新的项具有真确的顺序。SortedList最适合于不会经常改变的数据。
然而不管任何一个集合初始化时请给它一个初始的大小,因为MSDN上有讲到,这些集合在添加项时如果Count小于Capacity则此方法是一个O(1)运算,如果需要增加容量以容纳新元素,则此方法成为O(n)运算,其中n为Count。
我们以ArrayList为例,ArrayList list=new ArrayList();此时集合默认的大小为零,当加入一个元素时,容量变成4,当加到5个时容量变成8,每次变化都是原来的两倍。
ArrayList list=new ArrayList(20);
list.add(1); //box
int i=(int)list[0]; //unbox
这将是一个很糟糕的事情。这样将出现装箱拆箱。
我解释一下装箱和拆箱。装箱:将值类型转换为引用类型。拆箱:将引用类型转换为值类型。装箱和拆箱在一定程度上影响了系统效率,所以我们应当尽量避免其发生。幸运的是泛型的出现很好的解决了这一问题。
List<int> list = new List<int>;
list.add(1);
int i=list[0];
这样就不需要进行装箱拆箱的动作了,并且不可以存储不同于该集合中已定义类型的任何内容,这还可以减少潜在的错误情况,因为尝试存储错误的数据类型将导致编译错误。所以对于集合的选择我们应当尽量选择泛型集合。
今日c#性能优化明星:泛型集合
优化指数:95
第五篇:泛型集合
最新推荐文章于 2024-04-30 15:47:10 发布