c#基础笔记-----------集合
首先所谓集合是用于管理对象的容器类。一方面集合将独立的对象汇集成群集,作为一个群集来管理,以便进行整体性操作;而另一方面,集合可以方便地获取群集中的个体,进行个体化操作。在.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#基础笔记-----------集合的更多相关文章
- JavaScript基础笔记集合(转)
JavaScript基础笔记集合 JavaScript基础笔记集合 js简介 js是脚本语言.浏览器是逐行的读取代码,而传统编程会在执行前进行编译 js存放的位置 html脚本必须放在&l ...
- java基础技术集合面试【笔记】
java基础技术集合面试[笔记] Hashmap: 基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键(除了不同步和允许使用 null 之外,Ha ...
- MYSQL基础笔记(一)
关系型数据库概念: 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库 关系模型:一种所谓建立在关系上的模型. 关系模型包含三个方面: 1.数据结构:数据存储的问题,二 ...
- 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错
原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...
- C#基础笔记---浅谈XML读取以及简单的ORM实现
背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方 ...
- Python学习基础笔记(全)
换博客了,还是csdn好一些. Python学习基础笔记 1.Python学习-linux下Python3的安装 2.Python学习-数据类型.运算符.条件语句 3.Python学习-循环语句 4. ...
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. . ...
- REDIS基础笔记
Redis基础笔记 资源链接 简介 简介 安装 五种数据类型及相应命令 1. 字符串类型 2. 散列类型 3. 列表类型 4. 集合类型 5. 有序集合 其他 事务 SORT 生存时间 任务队列 发布 ...
- Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)
Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...
随机推荐
- Codeforces Gym 100338C C - Important Roads tarjan
C - Important RoadsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contes ...
- delphi 查找对话框
调用查找对话框 关键点 HTMLID_FIND = 1; //查找对话框 HTMLID_VIEWSOURCE= 2; //用记事本查看源代码 HTMLID_OPTIONS =3; //Internet ...
- C# Func<>托付
曾经我们为了可以调用一个方法.必须比照这种方法定义一个对应的delegate. 原先我们定义delegate // 托付声明 -- 定义一个签名: delegate double MathAction ...
- 【经验记录】Android上传文件到服务器
Android中实现上传文件,其实是很简单的,和在java里面是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要配置content-type的一些参数!如果这些都弄好了,上传就很简 ...
- Android源代码下载方法具体解释
作者:张星 相信非常多下载过内核的人都对这个非常熟悉 git clone git://android.git.kernel.org/kernel/common.git kernel 可是这是在曾经,如 ...
- cvsnt 设置用户、修改密码
忘记密码后,可以用administrator 新建一个用户,使用这个用户的账号. password agent 设置clear password不好使.. cvsnt配置 创建用户1 .下载cvs ...
- C#并行编程 (Barrier,CountdownEvent,ManualResetEventSlim,SemaphoreSlim,SpinLock,SpinWait )
背景 有时候必须访问变量.实例.方法.属性或者结构体,而这些并没有准备好用于并发访问,或者有时候需要执行部分代码,而这些代码必须单独运行,这是不得不通过将任务分解的方式让它们独立运行. 当任务和线程要 ...
- Linux内核--网络栈实现分析(一)--网络栈初始化--转
转载地址 http://blog.csdn.net/yming0221/article/details/7488828 作者:闫明 本文分析基于内核Linux Kernel 1.2.13 以后的系列博 ...
- ( 转转)Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
大家好,今天跟大家谈谈Intent的用法. Intent在安卓中主要用于打开另外一个页面,这个页面可能是一个activity也可能是一个应用,也可能是 其它…… 且看下面介绍,总结摘抄网友一些 ...
- js页面刷新的几种方法
Javascript刷新页面的几种方法: 1 history.go(0) 2 location.reload() 3 location=location 4 location.assign(locat ...