C#集合类

这几天头疼,昨天晚上出去逛了会,尼玛,坐车的时候更晕了!!

 

这年头,到处都是亚健康,还好体检没啥子问题!

 

本编来看下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接口)。集合内的每个对象键值必须唯一,而哈希代码不一定唯一。Hashtablekeyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对。
 
Dictionary<T Key, T Value>(泛型集合类):表示一个字典集合,相当于字典里,单词和解释的对应关系,实现IDictionary接口。在使用前,你必须声明它的键类型和值类型
 
StactQueue:按照存储次序顺序保存System.Object类型元素进入集合类中,两者仅仅实现了ICollection 接口。栈是后进先出,而队列则是先进先出。
通常情况下,在以下场合可以考虑采用以上这些集合
*   接收和处理集合内项目时顺序比较重要。
*   你能在处理项目之后丢弃它。
*   你不需要访问集合中的任意项目。
 
SortedList类:表示键/值对的集合,与哈希表类似,区别在于SortedList中的Key数组是排好序的。实现了IDictionaryICollection接口。键可以是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>。这个名称很容易理解,因为这个集合基于散列值,运算速度非常快。实现ISerializableIDeserializationCallback接口。

 

 

LinkedList<T>类:是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用。实现ICollection<T>接口。

 

 

第三个问题:

集合类的作用和使用?

见图

Stack类的常用方法:

 

Queue类常用方法:

 

StoreList常用方法:

 


主要的泛型接口和类型:





泛型集合类及其功能:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值