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

推荐订阅源

爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
Y
Y Combinator Blog
Vercel News
Vercel News
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
P
Proofpoint News Feed
WordPress大学
WordPress大学
V
V2EX
The Register - Security
The Register - Security
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
D
DataBreaches.Net
G
Google Developers Blog
O
OpenAI News
S
Schneier on Security
Simon Willison's Weblog
Simon Willison's Weblog
I
Intezer
Engineering at Meta
Engineering at Meta
Recorded Future
Recorded Future
T
Threatpost
The Hacker News
The Hacker News
Cisco Talos Blog
Cisco Talos Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
B
Blog RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
T
The Exploit Database - CXSecurity.com
L
LINUX DO - 热门话题
G
GRAHAM CLULEY
博客园 - 叶小钗
V
Vulnerabilities – Threatpost
云风的 BLOG
云风的 BLOG
L
LINUX DO - 最新话题
MyScale Blog
MyScale Blog
L
LangChain Blog
Scott Helme
Scott Helme
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
Google Online Security Blog
Google Online Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
N
News | PayPal Newsroom
NISL@THU
NISL@THU
M
MIT News - Artificial intelligence
Cloudbric
Cloudbric
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
Recent Announcements
Recent Announcements

博客园 - 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)。