在学习算法这本书图论那一部分的时候,接触到了几个类似for(int w:G.adj(v)),的语句,不是很理解,就去百度,发现这是一种叫做foreach的语法,在书的76页有讲到,但是之前没认真看书,下面是有关我的foreach学习笔记:

foreach用于访问一个集合内的所有元素,适用于遍历数组和集合类。注意foreach不是关键字,书上对foreach的解释的大概意思是:可以将该fo语句看做是对于集合中的每个元素,执行以下的代码。它不需要知道集合的具体细节,只是处理集合中的每一个元素。

foreach的大概格式是;

for(元素类型t 元素变量x : 遍历对象obj){

引用了x的java语句;

}

通过举例子,或许会更加了解foreach:


在一维数组中使用:

  1. int array[ ] = {1,2,3,4};
  2. for(int x : array) //比平常的写法要简单
  3. {
  4. System.out.println("x");
  5. }

在二维数组中的使用:

  1. int array[ ][ ] = { {4,3},{1,2}} //类似也可以写3维数组
  2. for(int x[ ] ;array){
  3. for(int b ; x){
  4. System.out.println("e");
  5. }
  6. }

不过foreach语句应该更多在遍历集合类型,且集合类型是要求可迭代的,即要求实现Iterable<T>接口,算法书上的Stack ,Queue以及Bag都有实现iterable接口,并返回一个Iterator对象。

其中Iterator类必须包括两个方法:

1.hasNext(),返回一个布尔值。

2.next(),返回集合中的一个元素。

这里贴一个Bag的代码:

  1. import java.util.Iterator;
  2. public class Bag<Item> implements Iterable<Item>{
  3. private Node first;
  4. private int N;
  5. private class Node
  6. {
  7. Item item;
  8. Node next;
  9. }
  10. public void add(Item item)
  11. {
  12. //和Stack的push方法一样
  13. Node oldfirst = first;
  14. first = new Node();
  15. first.item = item;
  16. first.next = oldfirst;
  17. N++;
  18. }
  19. //这里实现了接口并且重写了俩方法
  20. private class ListIterator implements Iterator<Item>
  21. {
  22. private Node current = first;
  23. public boolean hasNext() //检测currents是否为空
  24. {return current != null;}
  25. public void remove(){};
  26. public Item next()
  27. {
  28. Item item = current.item;
  29. current = current.next; //实例变量来记录当前节点
  30. return item ;
  31. }
  32. }
  33. //返回了一个iterabor对象
  34. public Iterator<Item> iterator()
  35. { //
  36. return new ListIterator();
  37. }
  38. }

实现了iterator接口并重写了那俩方法后,之后就可以用foreach语句了,例子如下:

  1. Bag<Transaction> collection = new Bag<Transaction>;//在Bag中维护一个可交易集合,和书上的类似
  2. //此处省略具体实现代码......................;
  3. for(Transaction t : collection)
  4. { System.out.println(t);}

可迭代的集合类型使用foreach语句的更多相关文章

  1. C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能

    1.IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环 ...

  2. C# 通过IEnumberable接口和IEnumerator接口实现泛型和非泛型自定义集合类型foreach功能

    IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环,如 ...

  3. C# foreach语句

    一.C# foreach语句 foreach语句能够对实现Ienumerable接口的容器进行遍历,并提供一个枚举器来实现Ienumerable接口.foreach语句为数组或对象集合中的各个元素执行 ...

  4. MSIL实用指南-生成foreach语句

    foreach可以迭代数组或者一个集合对象.foreach语句格式是它的生成步骤是foreach (<成员> in <集合>) <循环体> 一.声明三个变量,loc ...

  5. 自定义一个可以使用foreach语句进行迭代的类(IEnumerable)

    在c#中,凡是实现了IEnumerable接口的数据类型都可以用foreach语句进行迭代访问.所以,我们要定义一个可以使用foreach进行迭代访问的类,就必须要实现IEnumerable接口. / ...

  6. mybatis里的foreach语句

    相信用了Mybatis的朋友们,都曾有一个疑惑,就是foreach是怎么用的,下面我就简单讲讲我的理解: foreach主要用在SQL语句中迭代一个集合.foreach元素的属性主要由item,ind ...

  7. MyBatis的foreach语句详解

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.it ...

  8. MyBatis的foreach语句详解 list array map

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.it ...

  9. 从foreach语句枚举元素看数组

    在foreach语句中使用枚举,可以迭代数组或集合中的元素,且无须知道集合中的元素的个数.如图显示了调用foreach方法的客户端和集合之间的关系.数组或集合实现带GetEnumerator()方法的 ...

随机推荐

  1. 基于HtmlUnit的模板的网页数据抽取

    既然方向定了,就开始做实验室吧,做舆情分析,首先就是要收集相关的语料 正好实验室有同学在做标化院的信息抽取抽取这块 于是把程序拿过来研究研究正好 完整程序在126邮箱共享: 可下载数:20  共享连接 ...

  2. linux shared lib 使用与编译

    一.              动态链接库的原理及使用 Linux提供4个库函数.一个头文件dlfcn.h以及两个共享库(静态库libdl.a和动态库libdl.so)支持动态链接. Ø        ...

  3. Qt 获取usb设备信息 hacking

    /************************************************************************** * Qt 获取usb设备信息 hacking * ...

  4. GLSL学习_高斯滤波

    使用RenderMonkey: 从自带的sobel修改的. vertex: uniform float height; varying vec4 vTexCoords00; varying vec4 ...

  5. PS常用

    一.文字和背景居中 1.按Ctrl+A或用矩形框选中所有 2.按选择工具->在工具属性栏里面会显示6种方向的对齐方式 二.画准确铺助线 1.视图->新建参考线->输入数值既可

  6. 【英语】Bingo口语笔记(59) - 穿着的表达

  7. 【Python】Python重新学习

    <python基础教程(第二版)> http://www.cnblogs.com/fnng/category/454439.html 分片(后面取的是前一位) eg: >>&g ...

  8. bash 的漏洞,你们中招了吗?

    http://threatpost.com/major-bash-vulnerability-affects-linux-unix-mac-os-x 检测: $ env x='(){:;}; echo ...

  9. 隐藏 php apache 的版本号

    隐藏Apache版本信息 找到apache安装路径,譬如\Apache\conf\httpd.conf 修改httpd.conf ServerTokens ProductOnly ServerSign ...

  10. datawindow.net 动态按条件汇总字段值

    string xblx = dw1.GetItemString(row, "c_xblx"); string xbid = dw1.GetItemString(row, " ...