首先所谓集合是用于管理对象的容器类。一方面集合将独立的对象汇集成群集,作为一个群集来管理,以便进行整体性操作;而另一方面,集合可以方便地获取群集中的个体,进行个体化操作。在.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. 从零开始学android开发-通过WebService获取今日天气情况

    因为本身是在搞.NET方面的东东,现在在学习Android,所以想实现Android通过WebService接口来获取数据,网上很多例子还有有问题的.参考:Android 通过WebService进行 ...

  2. 从零开始学android开发-View的setOnClickListener的添加方法

    1)第一种,也是最长见的添加方法(一下都以Button为例) Button btn = (Button) findViewById(R.id.myButton); btn .setOnClickLis ...

  3. Codeforces Round #185 (Div. 2) B. Archer 水题

    B. Archer Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/312/problem/B D ...

  4. Codeforces Round #172 (Div. 2) B. Nearest Fraction 二分

    B. Nearest Fraction Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/281/p ...

  5. Codeforces Bubble Cup 8 - Finals [Online Mirror] F. Bulbo DP

    F. Bulbo Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/575/problem/F Des ...

  6. google maps api申请的问题

    现在已经改由统一的GOOGLE API控制台进行所有GOOGLE API的管理了. 方法是使用Google帐号登入 https://code.google.com/apis/console. 然后在所 ...

  7. 琐碎-hadoop2.2.0目录结构

    之前了解了一下0.20.2和1.1.0.以后现在主流肯定是2.x吧,包含了之前没有的yarn bin Hadoop最基本的管理脚本和使用脚本,这些脚本是sbin目录下管理脚本的基础实现,用户可以用这些 ...

  8. cooking java ——加密解密

    java安全与密码概述 主要分为三部分: 密码学基础,包括:相关术语:分类:常用安全体系. java的安全组成:jdk以及第三方扩展. 相关实现代码,包括:base64.MD5········ 密码学 ...

  9. MapReduce中的作业调度

    MapReduce是hadoop提供一个可进行分布式计算的框架或者平台,显然这个平台是多用户的,每个合法的用户可以向这个平台提交作业,那么这就带来一个问题,就是作业调度. 任何调度策略都考虑自己平台调 ...

  10. iOS之Storyboard References

    如果你曾经使用 interface builder 创建过一个复杂.界面非常多的应用,你就会明白最后那些Storyboards 文件变的有多大.他会迅速变的无法管理,阻碍你的进度.自从引入 Story ...