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的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...
随机推荐
- cdoj 1250 喵哈哈的矩阵 数学题
喵哈哈的矩阵 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1250 Desc ...
- delphi 插入 HTML代码 播放器
Delphi在Webbrowser中插入 HTML/java script代码 使用方法将下面的代码赋值到1个记事本里保存,然后保存为xxx.htm就可以看到效果使用PasteHtml实现功能 的事件 ...
- 使用自定义的BaseAdapter实现LIstView的展示
http://stephen830.iteye.com/blog/1141394 使用自定义的BaseAdapter实现LIstView的展示 实现以下功能点: 1.通过自定义的BaseAdapter ...
- Swift学习笔记(一)搭配环境以及代码执行成功
1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.可以开发ios,mac相关的app哦!是苹果以后大力推广的语言哦! 2.Swift给你带来什么机会 ...
- Swift3.0相对于2.3语法的一些变化
前言 : Swift3.0的Swift的第3个主要版本,目标是安全,快速和有表现力,也是第一个有开源社区参与开发的Swift版本.由于语法和API改动比较多,Xcode 8.0 Beta提供了migr ...
- 【Github教程】史上最全github用法:github入门到精通
原文 http://www.eoeandroid.com/thread-274556-1-1.html [初识Github] 首先让我们大家一起喊一句"Hello Github". ...
- VRP相关知识整理
一.扩展问题分类: ★ the capacitated vehicle routing problem (CVRP) , 即classical VRP ★ the vehicle routing pr ...
- Jfinal学习笔记
实习期间,公司使用jfinal做开发,所以就学习了这个框架 Jfinal作为一个极速ORM,使用上非常方便,核心源代码1万多行,压缩后只有200多KB. 从入口开始 作为一个web项目,首先解读web ...
- css笔记01:CSS例子
body { margin:0; padding:0; background:#000 url('images/backgrounds/star.png') no-repeat fixed; font ...
- Linq 用法笔记
Linq中怎么用 between…and? var query = from p in context.Parent from c in context.Child.Where(x => p.c ...