Java foreach

foreach是Java 5新特性之一,提供了对数组和Collection集合的简化的遍历方式,此处对for的升级是为了简化书写。

高级for循环格式:

for (数据类型  变量名 :被遍历的集合(Collection)或者数组) {

}

下面通过对三种常用对象的遍历来了解高级for的用法。

数组的遍历

public class ForeachDemo {
	public static void main(String args[]) {
		String[] str = {"a", "b", "c"};
		// 普通for循环
		for(int i=0; i< str.length; i++) {
			System.out.println("for: " + str[i]);
		}
		// 高级for循环
		for(String s: str) {
			System.out.println("foreach: " + s);
		}
	}
}
通过比较发现,对数据的遍历代码有了一定的简化,省略了对数组下标的控制;但这样也损失部分功能,失去了对数组修改的方法。普通循环中可以通过数组下标找到该元素对其增删改读,但高级for只有读取的功能。注意:高级for中的s是引用,修改s只是修改了s的引用,并没有操作到数组中的元素。还有就是数组下标可以用来做判断条件,比如说要对最后的一个元素做特殊处理,高级for就没有这样的功能。所以建议在遍历数组时,还是用一般for循环较好。

Collection集合的遍历

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class ForeachDemo {
	public static void main(String args[]) {
		Collection<String> al = new ArrayList<String>();
		al.add("java01");
		al.add("java02");
		al.add("java03");
		
		// 迭代器遍历
		Iterator<String> it = al.iterator();
		while(it.hasNext()) {
			String s = it.next();
			System.out.println("迭代器遍历:" + s);
		}
		// foreach遍历
		for(String s: al) {
			System.out.println("foreach遍历:" + s);
		}
	}
}
通过比较发现,对Collection集合遍历代码有了很大的简化,不用再使用迭代器,直接将Collection集合中的对象和定义的对象的引用关联起来,很方便的实现了对象的获取。同样这里也有功能的损失,迭代器中可以用remove来删除;如果是ListIterator还有增删改查的功能。这个就要根据情况来选择使用方法,如果没有修改操作,使用foreach书写简洁,比较合理;如果需要修改,那就只能通过迭代器的遍历方法完成。

Map集合的遍历

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class ForeachDemo {
	public static void main(String args[]) {
		Map<Integer, String> map = new HashMap<Integer, String>();
		map.put(1, "a");
		map.put(2, "b");
		map.put(3, "c");
		// 迭代器遍历
		Set<Integer> keySet = map.keySet();
		Iterator<Integer> it = keySet.iterator();
		while(it.hasNext()) {
			Integer i = it.next();
			String s = map.get(i);
			System.out.println("迭代器遍历:" + i + "--" + s);
		}
		// foreach遍历
		for(Integer i : map.keySet()) {
			String s = map.get(i);
			System.out.println("foreach遍历:" + i + "--" + s);
		}
		// foreach遍历
		for(Map.Entry<Integer, String> entry : map.entrySet()) {
			Integer i = entry.getKey();
			String s = entry.getValue();
			System.out.println("foreach遍历:" + i + "--" + s);
		}
	}
}

通过比较发现,用foreach也可以间接实现对Map集合的遍历,并且在书写形式上也有很多的简化。同Collection集合一样,没有使用迭代器就不能用迭代器对集合进行修改;因为在遍历Map集合时,迭代器本就是用来实现遍历的,几乎不需要去修改,所以这个缺陷就不是那么明显了。


foreach作为一个对for简化书写的升级,既带来了便捷,也有自身的局限性;通过上面的对比,相信对foreach的使用方式和使用的情景应该有了大致的了解。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值