话题8 基本for循环与加强型for循环

原创 2015年11月21日 17:10:20

1 加强型for循环概述

         从 JDK 1.5起,增加了加强型for循环的用法,加强型for循环在操作数组和集合方面有很大方便性。虽然加强型for循环有很大便利性,但是加强型for循环也有一定局限性。表现在如下几个方面:

       (1)只能对数组元素进行顺序访问。

       (2)只能访问集合中的所有元素。

        (3)循环中没有当前索引,因此无法对指定元素进行操作。

2 加强型for循环的处理(实现)

        加强型for循环只是在基本for循环的基础上做了一层简单的包装而已,其底层也是通过基本for循环来实现的。
如下:
package chapter1;

import java.util.HashSet;
import java.util.Set;

import org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID;

public class MysSet<E> {

	private Set<E> ids = new HashSet<E>();

	public void addIds(E id) {
		ids.add(id);
	}

	public boolean removeId(E id) {
		return ids.remove(id);
	}

	public static void main(String[] args) {
		MysSet<String> set = new MysSet<String>();
		set.addIds("9011");
		set.addIds("9022");
		set.addIds("9033");
		for (String str : set) {
			System.out.println(str);
		}
	}

}

这是一个自定义集合,代码中for循环会出现错误,从而得知,加强型for循环要求右侧的变量为string和iterable型,而我们声明的MySet并不是iterable型。那怎样才能让他成为iterable型呢。实现接口iterable即可。下面是改进后的程序:
package chapter1;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class MysSet<E> implements Iterable<E> {

	private Set<E> ids = new HashSet<E>();

	public void addIds(E id) {
		ids.add(id);
	}

	public boolean removeId(E id) {
		return ids.remove(id);
	}

	public Iterator<E> iterator() {
		return ids.iterator();
	}

	public static void main(String[] args) {
		MysSet<String> set = new MysSet<String>();
		set.addIds("9011");
		set.addIds("9022");
		set.addIds("9033");
		for (String str : set) {
			System.out.println(str);
		}
	}

}

程序运行结果
9011
9022
9033

小结:如果加强型for循环处理的不是数组类型,那么会转换为去调用加强型for循环右侧变量的iterator()方法,而该方法是在iterable中声明的,因此右侧的变量必须是数组类型或者iterable类型。从处理方式上来看,加强型for循环在处理集合类(确切说是iterable类型的元素时),底层也是基本型for循环实现的。

3加强型for循环总结


(1) 加强型for循环的右侧的变量(即冒号后面的集合)必须为数组类型或者iterable类型。
(2)   底层是依赖基本型for循环来实现的。

版权声明:本文为博主原创文章,转载请注明出处。

加强型for循环

JDK1.5加入的增强for和循环.  语法是: for(ElementType element:arrayName){}; 举个例子:(1)   ...

java 集合(2) 遍历collection集合方法 iterator / 加强型for循环

代码如下: Collection c = new ArrayList(); c.add("hello"); c.add(new Iplong("li","ji")); c.add(new Iplong...
  • nx188
  • nx188
  • 2015年12月29日 13:19
  • 1995

python入门系列8:for...in循环

使 用while循环遍历稍显麻烦,因为需要我们手动维护一个循环变量。python 专门设计了一个for...in...循环来更加方便的做遍历或者说迭代的工作。for...in...语法for x i...

java8入门(三) --流,不要再用for循环了

刚开始用java8的时候,很多都是替代for循环,因为java8推出了强大的流stream,关于流的用法很多,百度一下就可以搜到语法之类,所以这里我只想举一些简单替代for的例子,含义那些就自己去查吧...

JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法

JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法 学完我们的java之旅,其实收获还是很多的,但是依然还...

黑马程序员——Java高新技术——JDK4.5版本新特性枚举、高级for循环、静态导入、可变参数、基本数据类型的自动装箱与拆箱

----------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ----------------------Java培训、Android培训、iOS培训、.Net培训、...

静态导入-可变参数-增强for循环-基本数据类型的自动拆箱与装箱

静态导入·import 语句可以导入一个类或某个包中的所有类。·import static语句导入一个类中的某个静态方法或所有静态方法·语法举例: -import static java.lang.M...

Java高新技术【1】 (静态导入-可变参数-增强for循环-基本数据类型的自动拆箱与装箱)

(1)静态导入 ·import 语句可以导入一个类或某个包中的所有类。 ·import static语句导入一个类中的某个静态方法或所有静态方法 静态导入与编译器语法设置:  impo...

Eclipes使用,可变参数,高级For循环,基本数据自动装箱拆箱

 2013-07-22 23:08 586人阅读 评论(0) 收藏 举报  分类: Java基础(41)  版权声明:本文为博主原创文章,未经博主允许不得转...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:话题8 基本for循环与加强型for循环
举报原因:
原因补充:

(最多只允许输入30个字)