可迭代的集合类型使用foreach语句
在学习算法这本书图论那一部分的时候,接触到了几个类似for(int w:G.adj(v)),的语句,不是很理解,就去百度,发现这是一种叫做foreach的语法,在书的76页有讲到,但是之前没认真看书,下面是有关我的foreach学习笔记:
foreach用于访问一个集合内的所有元素,适用于遍历数组和集合类。注意foreach不是关键字,书上对foreach的解释的大概意思是:可以将该fo语句看做是对于集合中的每个元素,执行以下的代码。它不需要知道集合的具体细节,只是处理集合中的每一个元素。
foreach的大概格式是;
for(元素类型t 元素变量x : 遍历对象obj){
引用了x的java语句;
}
通过举例子,或许会更加了解foreach:
在一维数组中使用:
int array[ ] = {1,2,3,4};
for(int x : array) //比平常的写法要简单
{
System.out.println("x");
}
在二维数组中的使用:
int array[ ][ ] = { {4,3},{1,2}} //类似也可以写3维数组
for(int x[ ] ;array){
for(int b ; x){
System.out.println("e");
}
}
不过foreach语句应该更多在遍历集合类型,且集合类型是要求可迭代的,即要求实现Iterable<T>接口,算法书上的Stack ,Queue以及Bag都有实现iterable接口,并返回一个Iterator对象。
其中Iterator类必须包括两个方法:
1.hasNext(),返回一个布尔值。
2.next(),返回集合中的一个元素。
这里贴一个Bag的代码:
import java.util.Iterator;
public class Bag<Item> implements Iterable<Item>{
private Node first;
private int N;
private class Node
{
Item item;
Node next;
}
public void add(Item item)
{
//和Stack的push方法一样
Node oldfirst = first;
first = new Node();
first.item = item;
first.next = oldfirst;
N++;
}
//这里实现了接口并且重写了俩方法
private class ListIterator implements Iterator<Item>
{
private Node current = first;
public boolean hasNext() //检测currents是否为空
{return current != null;}
public void remove(){};
public Item next()
{
Item item = current.item;
current = current.next; //实例变量来记录当前节点
return item ;
}
}
//返回了一个iterabor对象
public Iterator<Item> iterator()
{ //
return new ListIterator();
}
}
实现了iterator接口并重写了那俩方法后,之后就可以用foreach语句了,例子如下:
Bag<Transaction> collection = new Bag<Transaction>;//在Bag中维护一个可交易集合,和书上的类似
//此处省略具体实现代码......................;
for(Transaction t : collection)
{ System.out.println(t);}
可迭代的集合类型使用foreach语句的更多相关文章
- C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能
1.IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环 ...
- C# 通过IEnumberable接口和IEnumerator接口实现泛型和非泛型自定义集合类型foreach功能
IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环,如 ...
- C# foreach语句
一.C# foreach语句 foreach语句能够对实现Ienumerable接口的容器进行遍历,并提供一个枚举器来实现Ienumerable接口.foreach语句为数组或对象集合中的各个元素执行 ...
- MSIL实用指南-生成foreach语句
foreach可以迭代数组或者一个集合对象.foreach语句格式是它的生成步骤是foreach (<成员> in <集合>) <循环体> 一.声明三个变量,loc ...
- 自定义一个可以使用foreach语句进行迭代的类(IEnumerable)
在c#中,凡是实现了IEnumerable接口的数据类型都可以用foreach语句进行迭代访问.所以,我们要定义一个可以使用foreach进行迭代访问的类,就必须要实现IEnumerable接口. / ...
- mybatis里的foreach语句
相信用了Mybatis的朋友们,都曾有一个疑惑,就是foreach是怎么用的,下面我就简单讲讲我的理解: foreach主要用在SQL语句中迭代一个集合.foreach元素的属性主要由item,ind ...
- MyBatis的foreach语句详解
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.it ...
- MyBatis的foreach语句详解 list array map
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.it ...
- 从foreach语句枚举元素看数组
在foreach语句中使用枚举,可以迭代数组或集合中的元素,且无须知道集合中的元素的个数.如图显示了调用foreach方法的客户端和集合之间的关系.数组或集合实现带GetEnumerator()方法的 ...
随机推荐
- string.Format 格式化时间,货币
1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...
- Debian字符模式下修改显示分辨率
Debian字符模式下修改显示分辨率 一.准备工具 a) Git apt-get install git 二.获取屏幕修改辅助软件 a) 创建临时文件 mkdir /tmp/screenModify ...
- PHP后台执行
php中实现后台执行的方法: ignore_user_abort(true); // 后台运行set_time_limit(0); // 取消脚本运行时间的超时上限后台运行的后面还要,set_time ...
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网 ...
- [CTO]创业团队CTO应具备的素质
原文地址:http://www.cyzone.cn/a/20131001/245862_2.html [导读]CTO要让技术团队明白,公司不是请你来搞纯技术研发的,个别人可以纯技术导向,但整个团队的目 ...
- USACO 2014 Open Silver Fairphoto
这道题只是银牌组的第一题而我就写了 3K 的代码.唉. Description - 问题描述 FJ's N cows (2 <= N <= 100,000) are standing at ...
- swun 1397 来电显示
解题思路:这题最关键的是要注意当输入的数据,00123,0000等这些情况, 刚开始用long long, WA了好几发,非常迷茫,后来突然想起特殊数据, 用字符串,则轻松解决问题.顺便多说两句:当你 ...
- JavaScript对象 + Browser 对象 + HTML DOM 对象
JavaScript 对象 Array Boolean Date Math Number String RegExp Global Browser 对象 Window Navigator Screen ...
- T-SQL备忘(2):聚合函数运算和NULL
我们看表的数据: 而select AVG(Age) from Member1的结果为27.自己算一下就知道136/6 =22.666.而不是27,因此知道实际上Age为NULL的行没有参与运算.即: ...
- cocos2d-x 2.0 序列帧动画 深入分析
转自:http://blog.csdn.net/honghaier/article/details/8222401 序列帧动画主要有几个类: CCSpriteFrame:精灵帧信息,序列帧动画是依靠多 ...