java基础40 增强for循环(也叫foreach循环)

增强for循环是jdk1.5出现的新功能

1、增强for循环的作用

简化了迭代器的书写格式(注意:增强for循环底层还是使用了迭代器遍历)

2、增强for循环的格式

for(数据类型  变量名:遍历的目标){

}

3、增强for循环的适用范围

如果实现了 Iterable 接口或者数组对象都可以使用增强for循环

 1 package com.dhb.pattern;
 2
 3 import java.util.Iterator;
 4
 5 /**
 6  * @author DSHORE / 2018-6-8
 7  *
 8  */
 9 class MyList implements Iterable<String>{
10     Object[] arr=new Object[10];
11     int index=0;//当前指针
12     public void add(Object o){
13         arr[index++]=o;
14     }
15     public Iterator<String> iterator() {
16
17         return new Iterator<String>() {//new Iterator<String>():匿名内部类            Iterator接口,抽象的不能直接new
18             int cursor=0;//指针
19             //hasNext()、next()、remove()都是实现new Iterator<String>()中的方法
20             public boolean hasNext() {
21                 return cursor<index;
22             }
23             public String next() {
24
25                 return (String)arr[cursor++];
26             }
27             public void remove() {
28
29             }
30         };//结束匿名内部类的符号“;”
31     }
32 }
33 public class Demo2 {
34     public static void main(String[] args) {
35         MyList list=new MyList();
36         list.add("张三");
37         list.add("李四");
38         list.add("王五");
39         list.add("赵六");
40         for (String string : list) {
41             System.out.print(string+",");//返回结果:张三,李四,王五,赵六,
42         }
43     }
44 }

4、增强for循环需要注意的事项

1、增强for循环底层也是使用迭代器获取的,只不过获取迭代器是由jvm完成,不需要我们获取迭代器,索引在使用增强for循环遍历元素的过程中,不准使用集合对对象 对集合元素经行修改
    2、迭代器遍历元素和增强for循环的区别:使用迭代器遍历元素时可以删除集合元素,而增强for循环遍历集合元素时,不能调用迭代器里面的remove方法删除元素
    3、普通for循环与增强for循环的区别:普通for循环可以没有变量目标,而增强for循环一定要有变量目标

5、实例

 1  package com.dhb.pattern;
 2
 3  import java.util.HashSet;
 4  /**
 5   * @author DSHORE / 2018-6-8
 6   *
 7   */
 8  public class Demo3 {
 9      public static void main(String[] args) {
10         //集合
11          HashSet<String> set=new HashSet<String>();
12          set.add("狗剩");
13          set.add("铁蛋");
14          set.add("哮天神犬");
15
16          Iterator<String> it=set.iterator(); //使用迭代器遍历set集合
17          while(it.hasNext()){
18              System.out.println(it.next());
19          }
20
21          for(String s:set){//使用增强for循环遍历
22              System.out.println(s);
23          }
24
25         //数组
26          int[] arr={12,2,5,0};    
27          for (int i = 0; i < arr.length; i++) {//普通for循环遍历
28              System.out.println(arr[i]);
29          }
30      
31          for (int i : arr) {//增强for循环遍历
32              System.out.println(i);
33          }
34      }
35  }

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/9156896.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

原文地址:https://www.cnblogs.com/dshore123/p/9156896.html

时间: 2024-11-05 19:35:45

java基础40 增强for循环(也叫foreach循环)的相关文章

二维数组遍历的方式(for普通循环和foreach循环)

package com.Summer_0421.cn; /** * @author Summer * 二维数组遍历的方式for普通循环和foreach循环 */ public class Test03 { public static void main(String[] args) { show1(); show2(); } private static void show2() { int[][] its = new int[][]{{1},{1,2},{1,2,3},{1,2,3,4}};

BTA 常问的 Java基础40道常见面试题及详细答案(山东数漫江湖))

八种基本数据类型的大小,以及他们的封装类 引用数据类型 Switch能否用string做参数 equals与==的区别 自动装箱,常量池 Object有哪些公用方法 Java的四种引用,强弱软虚,用到的场景 Hashcode的作用 HashMap的hashcode的作用 为什么重载hashCode方法? ArrayList.LinkedList.Vector的区别 String.StringBuffer与StringBuilder的区别 Map.Set.List.Queue.Stack的特点与用

java中自己实现一个可以用foreach循环的类 Iterable,Iterator

要实现一个可以用可以用foreach循环的类就必须实现Iterable这个几口,接口中重写一个iterator方法,这个方法返回一个 Iterator<E>接口. 代码如下: public class IterTest implements Iterable<String> { //存储内容的数组 private Object[] obj=new Object[1]; //记录添加元素的个数 private int size;//记录当前元素的下标 private int curr

使用for循环还是foreach循环?

很多时候我们很自然的认为,for循环的时候使用foreach和原来的for循环用下标的方式遍历是相同的. 而且因为foreach循环写法简单,很容易理解,而且少去了很多麻烦的变量,所以估计在学会使用foreach循环之后,很多人就没有用过下标的循环了. 但是你知道两者其实还是有很大区别的,在不同的情况下面应该使用不同的方式去循环. 否则会导致循环的时间变长.数据量小的时候当然没有什么关系,但是一旦数据量大了之后问题就会暴露出来了. 首先我们要知道的时候foreach循环是利用迭代器的使用循环.那

JavaScript的map循环、forEach循环、filter循环

1.map循环 let arr=[1,2,3,4]; arr.map(function(value,key,arr){ //值,索引,数组(默认为选定数组) return item; //如果没有return则返回一个全是undefined的数组,个数是索引+1(key+1) }) //返回一个数组 2.forEach循环 let arr=[1,2,3,4]; arr.map(function(value,key,arr){ //值,索引,数组(默认为选定数组) return item; //进

PHP的for循环和foreach循环

PHP中的for循环 <?php $arr = array("a", "b", "c"); for( $i = 0; $i < count($arr); $i++){ echo $arr[$i]; }; // count 相当于js中的 length ?> 优化一下 <?php $arr = array("a", "b", "c", 'd'); $num = co

多线程下的for循环和foreach循环 System.InvalidOperationException: 集合已修改;可能无法执行枚举

背景:当循环体在循环的时候有需求要修改自己.或者在多线程下,循环静态变量的时候,别人很容易修改了循环体内的数据.但是这就会报错的 准备:for:foeach:多线程. 解决方案:For循环是线程安全的,foreach是线程不安全的.说起开好像很高大上哈.意思是在循环内如,如果调用他们自己的循环体.前者是可以的,但是后者是不行的. 再者如果你循环的是字典.字典是键值对的形式,所以采用线程安全的字典ConcurrentDictionary的字典也可以一定程度的解决问题.但是做好的方案还是添加锁 1,

JAVA基础_增强for循环:foreach

通常,访问List,Array,Set中的数据都是通过以下这种方式访问的 int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int i = 0; i < nums.length; i++) { System.out.println("i = " + i); } 自Java1.5之后,出现了一种更方便的访问方式:foreach int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; fo

JAVA基础针对自己薄弱环节总结01(循环之前的知识)

java中的标识符 组成:数字.字母.下划线.美元$符号组成. 规则:不能由数字开头. 类名:每一个单词的首字母大写 包名:所有小写 变量名.方法名:第一个单词首字母小写.后面首字母大写 常量:所有大写用下划线连接 凝视 单行凝视:// 多行凝视:/--/ (不能嵌套) 文档凝视:/*-../(能够被javadoc命令解析成Html文档(说明书)) 变量概述 格式一: 数据类型 变量名=初始化值: 格式二: 数据类型 变量名: 变量名=初始化值. 变量在使用前必须初始化. java中的数据类型