C#集合类
来源:互联网 发布:手机信号稳定软件 编辑:程序博客网 时间:2024/06/08 00:10
在使用数组过程中,由于受其类型和数组大小的限制,使我们迫切需要一种大小可变、类型可变的“数组”去存储我们的数据组。那么集合便是一种不可多得的选择。下面就简单总结几种比较简单的集合的使用方法。
1、System.Collections中可以直接使用的集合类有:
1)ArrayList
实现了接口:IList、ICollection、IEnumerable。
只要集合未被修改,ArrayList 就可安全地同时支持多个读取器随着向 ArrayList 中添加元素,容量通过重新分配按需自动增加(2倍增加)。如果需要建立一个对象数组,但不能预先知道数组的大小,就可以使用ArrayList。ArrayList把所有元素都当作object对象引用,因而在访问ArrayList的元素时要进行类型转换。
优点:动态改变大小、灵活方便的插入和删除元素、可排序
缺点:插入时性能不如数组、不是强类型的
2)BitArray
实现了接口:ICollection、IEnumerable。
管理位值的压缩数组。
3)Hashtable
实现了接口:IDictionary、ICollection、IEnumerable。
可以向Hashtable中自由添加和删除元素,有些像ArrayList,但没有那么大的性能开销。
4)SortedList
实现了接口:IDictionary、ICollection、IEnumerable。
SortedLIst兼顾了ArrayList和Hashtable的优点,可按键值来排序。
5)Queue
实现了接口:ICollection、IEnumerable。
Queque是队列,先进先出的访问各个元素可以调用Queque对象的GetEnumerator()方法,得到IEnumerator对象,来遍历队列中的各个元素。
6)Stack
实现了接口:ICollection、IEnumerable
Stack是堆栈,后进先出的访问各个元素可以调用Stack对象的GetEnumerator()方法,得到IEnumerator对象,来遍历堆栈中的各个元素
2、举例说明几种常用集合
1)ArrayList
ArrayList list = new ArrayList(); list.Add("你好"); list.Add(new int[] { 1, 2, 3, 4, 5, 6 }); Person p = new Person(); list.Add(p); list.Add(true); list.AddRange(new int[] { 1, 2, 3, 4, 5, 6 }); list.AddRange(list); for (int i = 0; i < list.Count; i++) { if (list[i] is int[]) { for (int j = 0; j < (list[i] as int[]).Length; j++) { Console.WriteLine(((int[])list[i])[j]); } } else if (list[i] is Person) { ((Person)list[i]).personSayHello(); } else if (list[i] is string) { Console.WriteLine(list[i]); } else Console.WriteLine(list[i]); } Console.ReadKey();
运行结果:
2)Hastable
即键值对集合。 键值对对象[键] =值
在键值对集合中,通过键去找值。注意:键值表中的键(key)必须唯一。
<span style="font-size:12px;">Hashtable ha = new Hashtable(); ha.Add(1, "张三"); ha.Add(2, "李四"); ha.Add(false, 2); ha.Add(3, '男'); foreach (var item in ha.Keys) { Console.WriteLine("键{0}的值是{1}", item, ha[item]); }</span>
<span style="font-size:12px;"> Console.ReadKey();</span>
运行结果:
3)List<> 泛型类
存在于System.Collections.Generic命名空间。
泛型集合转化为数组方法:list.toArray();
string s = "你好,我叫张三。"; byte[] buffer02 = Encoding.Default.GetBytes(s); File.WriteAllBytes(@"C:\Users\zhuanfeng\Desktop\new.txt", buffer02); Console.WriteLine("写入成功"); List<int> list = new List<int>(); list.Add(1); list.AddRange(new int[] { 2, 3, 4 }); list.AddRange(list); foreach (int item in list) { Console.WriteLine(item); } Console.ReadKey();
运行结果:
4)Dictionary
和Hastable相似,只是类型唯一定义。其中的键也必须是唯一的。
Dictionary<int, string> dir = new Dictionary<int, string>(); dir.Add(1,"张三"); dir.Add(2,"李四"); dir.Add(3,"王五"); dir[1] = "赵六"; foreach (KeyValuePair<int,string> keyValue in dir) { Console.WriteLine("{0}---{1}",keyValue.Key,keyValue.Value); } Console.ReadKey();
运行结果:
3、List<T>相比ArrayList<,>相比有什么优点。
答:(1)先解释装箱和拆箱的含义。装箱就是将值类型转换为引用类型;拆箱就是讲引用类型转换为值类型。看两种类型之间的转化是否发生装箱和拆箱操作是看两种类型之间是否存在继承关系。
(2)添加到 ArrayList中的任何引用或值类型都将隐式地向上强制转换为Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。List<T>使用泛型指定了集合的类型,所以它是类型安全的,故不存在装箱和拆箱,效率更高。
- C#集合类
- C# 集合类
- C#集合类选择
- C#集合类
- C#中的集合类
- C#集合类概述
- c#集合类
- C#集合类
- C# 集合类
- C# 集合类总结
- C#集合类
- C#集合类
- C#集合类选择
- C#集合类Queue
- c#集合类总结
- C#中的集合类
- C#集合类
- C#集合类Queue
- httpclient返回xml
- OPENCV之Mat类详解
- C++ auto_ptr智能指针的用法
- java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException 的解决办法
- MM模块-收货自动创建采购订单
- C#集合类
- Android设置横屏或竖屏-笔记
- kalman滤波的相关理解及MATLAB程序注解
- 如何用Java编写一段代码引发内存泄露
- 最大的数
- JAVA集合类(大公司面试喜欢问的)
- 菜鸟学习笔记-msi,vs2013配置openssl
- JSON
- 面向接口编程详解(二)