惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
J
Java Code Geeks
L
LangChain Blog
V
V2EX
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
博客园 - 司徒正美
B
Blog
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog

博客园 - blog of mb459

项目管理实战之团队管理 (转自:zhuweisky) 刘韧专访陈一舟:回顾ChinaRen时代 (ZT) 谈我对攻读计算机研究生的看法 - blog of mb459 个性主张:玩转你的86400秒 全世界所有程序员都会犯的错误-蔡学镛 变态级JAVA程序员面试32问(附答案)(转载) 互联网创业迎来回潮 风投开始第2波网络掘金 学习:怎样才是一个真正的DBA? sql 面试中的问题 IT从业人员必看的10大论坛 你为什么离开你以前的公司?(整理自csdn社区) 怎样从一名程序员过度到项目经理(整理自csdn论坛) 一篇不错的讲解Java异常的文章 新技术倍出 谁最可能挑战Java开发优势 我喜欢的10款Freeware 一个关于group by的sql 55种网页常用小技巧(转载) 使用Vs2005打造简单分页浏览器(1) C#中的类型转换(转载)
认识.NET的集合(转)
blog of mb459 · 2005-12-26 · via 博客园 - blog of mb459

.NET中大量的集合对象会让人产生一些疑惑,这篇“导游”指南将帮助你在System.Collections名域中找到自己的方向。

集合提供了一种将任意对象格式化存储的方法,我们都知道在日常的程序设计中,它们是多么有帮助。.NET类库提供了一系列令人困惑的集合对象,而每种对象又有专门的用途,看上去这似乎阻碍了我们利用这些“财富”,其实,更多的选择意味着更加灵活,但同时也意味着更加复杂。因此,它应当引起你的关注,你应对在何种情况下使用那种类型的集合有充分的理解,随我一起来了解如何使用.NET的集合。

.NET集合的定义

从.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.Collections的“导游”指南

在System.Collections名域空间中包括了6个内建的普通集合,你可以在程序中使用它们,另外有少许特殊的集合可以在 System.Collections.Specialized中找到,你会发现在某些场合中它们非常有用。在少数例外的情况下,每一个特殊的集合与一个内建的集合拥有相似的功能,让我们先来看一下这些内建的集合和一些不太深奥的特殊集合。

堆栈与队列

System.Collections.Stack和System.Collections.Queue类是只实现了ICollection界面的类,它们将System.Object类型的项目按照加入的顺序排列到集合中,集合中的对象只能按照以下的顺序获取到:堆栈是后进先出,而队列是先进先出,通常,你会在以下情况中考虑使用这些集合:

项目的接收和处理顺序很重要时;

你可以在处理一个项目之后删除它;

你不需要在集合中访问任意项目;

数组表

System.Collections.ArrayList类是只实现了IList界面的类,数组与集合的混合体是对它最好的描述,数组表将项目按照加入的顺序排列,每个项目被分配一个索引标识符,依据相关的索引号可以按照任意顺序检索,数组表会因项目的增加而变大,这使它比一般的数组更灵活,然而,所有可被转化为System.Object的项目均可被数组表接受,因而它比传统数组的系统开销要大很多,而且它也不是强类型(strongly typed)。