首先所谓集合是用于管理对象的容器类。一方面集合将独立的对象汇集成群集,作为一个群集来管理,以便进行整体性操作;而另一方面,集合可以方便地获取群集中的个体,进行个体化操作。在.Net中,集合被封装为对象,一个集合类型在本质都是一个类,例如ArrayList,Hashtable等,通过封装来实现信息隐藏,通过继承来实现功能扩展等,同时泛型集合也提供了更加多样的应用体验。

每个集合类都必然实现了IEnumerable接口(.Net里好多这样的基础接口如ICloneable),这也就意味着任何集合类都具有了GetEnumerator方法,也得以foreach语句遍历集合对象称为可能。

下面大概写下集合的一些基本类型接口:

在.Net角度看集合,集合为实现了若干接口的类。以ArrayList为例,其定义可以表示为:

public class ArrayList:IList,ICollection,IEnumerable,ICloneable

    public interface IEnumerable
{
IEnumerator GetEnumerator();
} public interface ICollection : IEnumerable
{
void CopyTo(Array array, int index);
int Count { get; }
bool IsSynchronized { get; }
object SyncRoot { get; }
} public interface IList : ICollection, IEnumerable
{
int Add(object value);
void Clear();
bool Contains(object value);
int IndexOf(object value);
void Insert(int index, object value);
void Remove(object value);
void RemoveAt(int index);
bool IsFixedSize { get; }
bool IsReadOnly{get;}
object this[int index] { get; set; }
}

IList提供了添加,清空,插入,删除,查找等多种操作,同时具有固定长度和只读属性,能够按照索引方式访问,另外还继承了ICollection和IEnumerable接口。可以看到这些基础集合接口的继承层次顺序是很清楚的,ICollection继承了IEnumerable,IList又同时继承了ICollection,IEnumerable。此外还可以看到在IEnumerable接口里返回IEnumerator接口对象,以公开枚举数,支持非泛型集合的简单迭代,为foreach操作提供支持。在.Net中,集合类必须严格实现IEnumerable接口才能与foreach兼容。关于它们的具体方法和属性介绍,我就不写在博客里了,.Net方法名和智能化提示已经让我们能够快速判断辨识出某方法和属性是用来实现什么功能的,参数类型,是否重载等等有相关提示,查查msdn里面都有详细解释。我写的c#学习笔记引用了一些以前我看过的书如《c#技术解密》《你必须知道的.Net》《c#程序设计》等等和msdn等网上有用的资料,我把它们里面就目前我学习掌握到的用自己的理解写下。如那方面有问题,还请多多指教。


好了,回归正题,刚才说到那个IEnumerator接口,有必要写一下此接口的用法。在.Net中可以通过枚举器实现简单的循环访问集合:枚举器实现了IEnumerator接口,其定义如下:

    public interface IEnumerator
{
bool MoveNext();
object Current { get; }
void Rest();
}

Current表示集合当前成员,Rest方法将枚举数复位到集合开始,并设置Current到第一个元素之前。看看我下面写的这行代码:

            ArrayList arr=new ArrayList();
arr.Add();
arr.Add();
List<string > intArr = new List<string>();
intArr.Add("LX");
intArr.Add("一木");
IEnumerator myArryList = arr.GetEnumerator();
IEnumerator myList = intArr.GetEnumerator();
while (myArryList.MoveNext()&&myList.MoveNext())
{
Console.WriteLine(myArryList.Current+" "+myList.Current);
}
Console.Read();

以ArrayList集合来管理不同类型的对象,会存在装箱和拆箱问题,从而影响性能,我们可以从泛型集合List<T>来代替。

在说一下按照集合类型实现的接口来分,集合主要分为:有序集合,索引集合和键式集合。

有序集合,主要是指仅实现了ICollection接口的集合类,如Stack和Queue。

索引集合,主要是实现了IList接口的集合类,如Array,ArrayList。

键式集合,主要是实现了IDictionary接口的集合类,如Hashtable,ListDictionary。

有时间的话再写,这些常用集合的操作。

c#基础笔记-----------集合的更多相关文章

  1. JavaScript基础笔记集合(转)

    JavaScript基础笔记集合   JavaScript基础笔记集合   js简介 js是脚本语言.浏览器是逐行的读取代码,而传统编程会在执行前进行编译   js存放的位置 html脚本必须放在&l ...

  2. java基础技术集合面试【笔记】

    java基础技术集合面试[笔记] Hashmap: 基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键(除了不同步和允许使用 null 之外,Ha ...

  3. MYSQL基础笔记(一)

    关系型数据库概念: 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库 关系模型:一种所谓建立在关系上的模型. 关系模型包含三个方面: 1.数据结构:数据存储的问题,二 ...

  4. 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错

    原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...

  5. C#基础笔记---浅谈XML读取以及简单的ORM实现

    背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方 ...

  6. Python学习基础笔记(全)

    换博客了,还是csdn好一些. Python学习基础笔记 1.Python学习-linux下Python3的安装 2.Python学习-数据类型.运算符.条件语句 3.Python学习-循环语句 4. ...

  7. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  8. REDIS基础笔记

    Redis基础笔记 资源链接 简介 简介 安装 五种数据类型及相应命令 1. 字符串类型 2. 散列类型 3. 列表类型 4. 集合类型 5. 有序集合 其他 事务 SORT 生存时间 任务队列 发布 ...

  9. Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

    Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...

随机推荐

  1. Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间取摸

    D. The Child and Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...

  2. Codeforces Gym 100342J Problem J. Triatrip bitset 求三元环的数量

    Problem J. TriatripTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/att ...

  3. [IOS]自定义长触屏事件

    写一个Demo来自定义一个长触屏事件,自定义长按手势. 实现步骤: 1.创建一个自定义手势类,命名为LongPressGestureRecognizer,在创建的时候继承UIGestureRecogn ...

  4. 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享

    使用Jquery+EasyUI 进行框架项目开发案例解说之中的一个 员工管理源代码分享 在開始解说之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery ...

  5. 关于null和undefined

    null和undefined都是一种类型..typeof查看变量类型.不要为该函数迷惑..因为他只是看上去官方! 见http://www.cnblogs.com/zhepama/articles/30 ...

  6. LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

    前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...

  7. QTP 中对象操作

    1.创建对象(将浏览器设置为一个对象) set oIE=createobject("internetexplorer.application") 2.将浏览器设置为可见的 oIE. ...

  8. envi中selected rgb bands contain different spatial sizes

    是选择了不同的影像文件envi中selected rgb bands contain different spatial sizes

  9. hdu 4685 简单匹配+Tarjan算法

    思路:首先看到这题以为能用poj1904的模版直接A掉,WA了几次,然后又TLE了几次.还是想到了正解. 一开始我想的大致方向已经是对的了.先是由王子向每个喜欢的公主建边,再求一次最大匹配,找出匹配后 ...

  10. hdu 1394 树状数组

    思路:从后面往前面统计,每次先sum+=Sum(num[i]+1),然后在update(num[i]+1,1).这样每次Sum每次加的个数就是num[i]的逆序对个数. 每次从队首调一个元素到队尾,逆 ...