这几天头疼,昨天晚上出去逛了会,尼玛,坐车的时候更晕了!!
这年头,到处都是亚健康,还好体检没啥子问题!
本编来看下C#的集合类和泛型,主要内容:
1、 什么是集合类、数组、泛型?
2、 都有哪些集合类?
3、 集合类作用和使用?
分割线、分割线、分割线………………………………………………………………
第一个问题:
什么是集合类(泛型集合、非泛型集合)、数组?
都是数据结构
集合,表示可以通过遍历每个元素来访问的一组对象(特别是可使用foreach循环访问)。一个集合包括多个元素(有的集合类元素可以自定义数据类型),即有一个集合类对象和N个元素对象。集合类是指实现集合功能的类。
从.NET 的角度看,所谓的集合可以定义为一种对象,这种对象实现一个或者多个System.Collections.ICollection、 System.Collections.IDictionary和System.Collections.IList接口。这一定义把 System.Collections名称空间中的“内置”集合划分成了三种类别:
* 有序集合:仅仅实现ICollection接口的集合,在通常情况下,其数据项目的插入顺序控制着从集合中取出对象的的顺序。 System.Collections.Stack和 System.Collections.Queue类都是ICollection集合的典型例子。
* 索引集合:实现Ilist的集合,其内容能经由从零开始的数字检索取出,就象数组一样。System.Collections.ArrayList对象是索引集合的一个例子。
* 键式集合:实现 IDictionary 接口的集合,其中包含了能被某些类型的键值检索的项目。IDictionary集合的内容通常按键值方式存储,可以用枚举的方式排序检索。 System.Collections.HashTable类实现了IDictionary 接口。
数组,最简单的数据结构是数组。数组是System.Array类的一个实例,使用它可以高效地访问给定下标的元素,但是数组有一个缺点,即在实例化时需要知道数组的大小,以后不能添加、插入和删除元素,数组必须有一个数字下标,不能使用字符串所索引寻找。
集合与数组很相似,都能存储多个数据,但集合的优点是:能够动态地扩大或收缩大小
【参考】http://www.cnblogs.com/netlyf/archive/2009/12/10/1620777.html
第二个问题:
都有哪些集合类?
泛型类和非泛型类:可以存储任何数据类型,字符串、类、结构(需要强制转换)等。
泛型性能较好,因为非泛型集合类需要装箱和拆箱,多次使用装箱和拆箱会造成较大的性能损失。
泛型的另一个特征是类型安全。如果使用ArrayList类,可以在这个集合中添加任意类型。
List<T>对应ArrayList
Dictionary<TKey, T Value>对应HashTable
Queue<T>对应Queue
ArrayList:动态数组,仅仅实现 Ilist接口(public interface IList : ICollection, IEnumerable),最适合描述为一种正常数组和集合的混合类型,按照加入顺序依次分配指定索引标示符,随着添加元素个数增加,容量增大,Arraylist负载比传统数组更大而且没有实现严格的类型化,也就可以接受任何转换为Object类型的对象(大胃王,来者不拒)。
HashTable:能用来存储多种类型的对象连同关联的唯一字符串键值,实现了IDictionary (继承Icollection接口,又继承IEnumerable接口)。集合内的每个对象键值必须唯一,而哈希代码不一定唯一。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对。
Dictionary<T Key, T Value>(泛型集合类):表示一个字典集合,相当于字典里,单词和解释的对应关系,实现IDictionary接口。在使用前,你必须声明它的键类型和值类型。
Stact和Queue:按照存储次序顺序保存System.Object类型元素进入集合类中,两者仅仅实现了ICollection 接口。栈是后进先出,而队列则是先进先出。
通常情况下,在以下场合可以考虑采用以上这些集合
* 接收和处理集合内项目时顺序比较重要。
* 你能在处理项目之后丢弃它。
* 你不需要访问集合中的任意项目。
SortedList类:表示键/值对的集合,与哈希表类似,区别在于SortedList中的Key数组是排好序的。实现了IDictionary和ICollection接口。键可以是int类型或string类型,与ArrayList类一样,在实例化SortedList对象时,其默认容量是16。
如:
SortedList mySL1 = new SortedList(); mySL1.Add(1.3, "fox"); mySL1.Add(1.4, "jumped"); mySL1.Add(1.5, "over"); mySL1.Add(1.2, "brown"); mySL1.Add(1.1, "quick");
HashSet<T>:这个集合类包含不重复项的无序列表(不能保存同样的元素)。这种集合称为“集(set)”。集是一个保留字,所以该类有另一个名称HashSet<T>。这个名称很容易理解,因为这个集合基于散列值,运算速度非常快。实现ISerializable和IDeserializationCallback接口。
LinkedList<T>类:是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用。实现ICollection<T>接口。
第三个问题:
集合类的作用和使用?
见图
Stack类的常用方法:
Queue类常用方法:
StoreList常用方法:
主要的泛型接口和类型:
泛型集合类及其功能: