第四章 集合与泛型 第二课: 有序列表的使用
2009-09-21 20:32
281 查看
并不是所有的集合被平等地创建。大部分情况下,有序的集合用对象列表处理比单独地访问它们是很明智的。
什么是有序列表?
通常集合是简单的一系列的对象集合,这些对象集合以一种有序地方式处理。例如,你可能创建一个类,依赖于特定的需求,你可能需要去访问对象时,一次只访问集合内的一个集合项。而且访问列表中间的项对于这个类没什么用。代替使用集合如ArrayList ,.NET Framework 有两个类它们的工作是像一个列表一样去存数据并且简单地按它们需要的去访问这些对象。Queue类和Stack类目的是被用于在一个有序的基础上存数据。
Queue 类
Queue 类是处理先进先出的有序的对象集。Queue 类的接口非常简单:它支持把数据入列和出列。队列的功能与ArrayList。特别地,访问和删除集合项在ArrayList 中是两个不同的操作。Queue 把这两个操作结合到了Dequeue 方法中。因为Queue类目的是被用来创建对象列表用来用某种方式来工作。像这个名称一样,队列像在银行排队的客户。它仅仅在意谁是下一个和在队列尾部加人。Queue类中最重要的属性和方法如下:
Name Description
Count 得到队列内的数据项的数目
Name Description
Dequeue 从队列头获取集合项,同时删除它。
Enqueue 从对尾添加数据项。
Peek 获取第一个集合项但不删除它
一旦你有了一个这个类的实例,你就能使用Enqueue 方法去向队列中增加数据项并用方法从列表中删除数据项,如:
Queue q = new Queue();
q.Enqueue("An item");
Console.WriteLine(q.Dequeue());
Queue 类允许你去增加重复的项和null值,所以你不能通过Dequeue和Peek方法去验证队列是否为空。为了验证是否为空,你要用Count 属性去看集合是否为空。如: 如果你要向队列中添加数据项并要删除它们然后把它们显示出来,如:
// C#
Queue q = new Queue();
q.Enqueue("First");
q.Enqueue("Second");
q.Enqueue("Third");
q.Enqueue("Fourth");
while (q.Count > 0)
{
Console.WriteLine(q.Dequeue());
}
因为Queue是个先入先出的集合,以上的例子将会出现以下的结果:
First
Second
Third
Fourth
你能够看下一个集合项同时不删除它,这种情况是很多的。假设你的代码操作对象的某些类型,如果你让它出队,然后发现某些人还要使用它,你就要把它放回队列中,但是它会丢掉队中的位置。这时Peek方法来了,如:
if (q.Peek() is String)
{
Console.WriteLine(q.Dequeue());
}
有些时候,你需要的是后进先出,这时Stack 类出现了。
Stack 类
与Queue 类相反, Stack 类是一个后进先出的集合。Stack类的接口非常简单:它提供了入栈和出栈操作。像它的名字一样,Stack类可以比作卡片栈。当你加入卡片到栈,你能从顶端拿走一张卡片,但不能从栈的中间拿卡片。方法和属性如下:
属性:
Name Description
Count 得到栈内集合项的数目
方法:
Name Description
Pop 从栈顶获取集合项同时删除它。
Push 向从栈顶添加集合项。
Peek 从栈顶获取集合项不删除它。
对Stack 类的操作与Queue 类类似, 如:
Stack s = new Stack();
s.Push("An item");
Console.WriteLine(s.Pop());
对于Queue 类, 你能添加重复数据和空值,所以你不能用Pop 或 Peek 方法去看Stack 为空。如:如果你向Stack 中添加集合项并且去删除它们。如下代码:
// C#
Stack s = new Stack();
s.Push("First");
s.Push("Second");
s.Push("Third");
s.Push("Fourth");
while (s.Count > 0)
{
Console.WriteLine(s.Pop());
}
因为Stack是一个后进先出的集合,结果会反转:
Fourth
Third
Second
First
什么是有序列表?
通常集合是简单的一系列的对象集合,这些对象集合以一种有序地方式处理。例如,你可能创建一个类,依赖于特定的需求,你可能需要去访问对象时,一次只访问集合内的一个集合项。而且访问列表中间的项对于这个类没什么用。代替使用集合如ArrayList ,.NET Framework 有两个类它们的工作是像一个列表一样去存数据并且简单地按它们需要的去访问这些对象。Queue类和Stack类目的是被用于在一个有序的基础上存数据。
Queue 类
Queue 类是处理先进先出的有序的对象集。Queue 类的接口非常简单:它支持把数据入列和出列。队列的功能与ArrayList。特别地,访问和删除集合项在ArrayList 中是两个不同的操作。Queue 把这两个操作结合到了Dequeue 方法中。因为Queue类目的是被用来创建对象列表用来用某种方式来工作。像这个名称一样,队列像在银行排队的客户。它仅仅在意谁是下一个和在队列尾部加人。Queue类中最重要的属性和方法如下:
Name Description
Count 得到队列内的数据项的数目
Name Description
Dequeue 从队列头获取集合项,同时删除它。
Enqueue 从对尾添加数据项。
Peek 获取第一个集合项但不删除它
一旦你有了一个这个类的实例,你就能使用Enqueue 方法去向队列中增加数据项并用方法从列表中删除数据项,如:
Queue q = new Queue();
q.Enqueue("An item");
Console.WriteLine(q.Dequeue());
Queue 类允许你去增加重复的项和null值,所以你不能通过Dequeue和Peek方法去验证队列是否为空。为了验证是否为空,你要用Count 属性去看集合是否为空。如: 如果你要向队列中添加数据项并要删除它们然后把它们显示出来,如:
// C#
Queue q = new Queue();
q.Enqueue("First");
q.Enqueue("Second");
q.Enqueue("Third");
q.Enqueue("Fourth");
while (q.Count > 0)
{
Console.WriteLine(q.Dequeue());
}
因为Queue是个先入先出的集合,以上的例子将会出现以下的结果:
First
Second
Third
Fourth
你能够看下一个集合项同时不删除它,这种情况是很多的。假设你的代码操作对象的某些类型,如果你让它出队,然后发现某些人还要使用它,你就要把它放回队列中,但是它会丢掉队中的位置。这时Peek方法来了,如:
if (q.Peek() is String)
{
Console.WriteLine(q.Dequeue());
}
有些时候,你需要的是后进先出,这时Stack 类出现了。
Stack 类
与Queue 类相反, Stack 类是一个后进先出的集合。Stack类的接口非常简单:它提供了入栈和出栈操作。像它的名字一样,Stack类可以比作卡片栈。当你加入卡片到栈,你能从顶端拿走一张卡片,但不能从栈的中间拿卡片。方法和属性如下:
属性:
Name Description
Count 得到栈内集合项的数目
方法:
Name Description
Pop 从栈顶获取集合项同时删除它。
Push 向从栈顶添加集合项。
Peek 从栈顶获取集合项不删除它。
对Stack 类的操作与Queue 类类似, 如:
Stack s = new Stack();
s.Push("An item");
Console.WriteLine(s.Pop());
对于Queue 类, 你能添加重复数据和空值,所以你不能用Pop 或 Peek 方法去看Stack 为空。如:如果你向Stack 中添加集合项并且去删除它们。如下代码:
// C#
Stack s = new Stack();
s.Push("First");
s.Push("Second");
s.Push("Third");
s.Push("Fourth");
while (s.Count > 0)
{
Console.WriteLine(s.Pop());
}
因为Stack是一个后进先出的集合,结果会反转:
Fourth
Third
Second
First
相关文章推荐
- 编写高质量代码改善C#程序――使用泛型集合代替非泛型集合(建议20)
- 使用泛型创建只读集合
- java 基础总结 -- enum 枚举与接口、泛型、集合的使用
- Redis大总结之三:SORT命令(对 列表|集合|有序集合 进行排序)
- 使用泛型集合模拟双色球开奖C#实例
- linq中查询列表的使用及iqueryable和list集合之间的转换
- 使用ol,添加有序列表
- 使用set集合出来list列表的计算
- css定义有序列表样式以及counter-reset、counter-increment 的使用
- Java泛型集合结构,List<T>,及其子类ArrayList<T>,LinkedList<T>的使用
- 使用反射为泛型集合添加其他类型的数据时遇到的问题
- 黑马程序员_Java语言_集合框架(一些使用案例及泛型)
- 在vb中使用Iphlpapi.dll获取网络信息 第四章 第四节 实例二:探测到某个IP地址经过的路由列表
- 使用泛型集合模拟双色球开奖C#代码
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
- API的理解和使用——有序集合
- 何时使用泛型集合
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- 集合框架_泛型概述和基本使用
- JAVA高级应用之集合 泛型 的使用