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

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循环来实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值