java 集合遍历

 首先比较一下 for循环 增强for循环 iterator

     增强for循环和iterator遍历的效果是一样的,也就说 增强for循环的内部也就是调用iteratoer实现的,但是增强for循环 有些缺点,例如不能在增强循环里动态的删除集合内容不能获取下标等

    可以看下面的例子:

   

/**
	 * 用加强的for循环遍历
	 * @param list
	 */
	public static void methodStrongFor(List<Integer> list) {
		for (Integer x : list)
			if (x % 2 == 0)
				list.remove(x);
		System.out.println(list);
	}
	/**\
	 * 用iterator遍历
	 * @param list
	 */
	public static void methodIterator(List<Integer> list) {
		Iterator<Integer> itr = list.iterator();
		while (itr.hasNext()) {
			Integer next = itr.next();
			if (next % 2 == 0) {
				itr.remove();
			}
				
		}
			
		System.out.println(list);
	}
方法:methodStrongFor()运行时会抛异常java.util.ConcurrentModificationException

方法: methodIterator()正常运行。

原因分析:因为增强的for循环内部就是调用iterator实现的,在遍历的时候就将list转化为了迭代器,当迭代器被创建之后,如果从结构上对列表修改除非通过迭代器自身的remove()add()方法,其他任何时间任何方式的修改,迭代器都会抛出ConcurrentModificationException异常

iterator好处:

Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构

iterator迭代能遍历并选择集合中的每个对象而不改变集合的结构

Map的两种遍历方法

如下列:

/**
	 * 用keySet方法遍历
	 */
	public static void keySetMethod() {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("key1", "value1");
		map.put("key2", "value2");
		map.put("key4", "value4");
		map.put("key3", "value3");
		Iterator<String> iterator = map.keySet().iterator();
		while (iterator.hasNext()) {
			String key = iterator.next();
			System.out.println(key + " : " + map.get(key));
		}
	}
	/**
	 * 用entrySet方法遍历
	 */
	public static void entrySetMethod() {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("key1", "value1");
		map.put("key2", "value2");
		map.put("key4", "value4");
		map.put("key3", "value3");
		System.out.println(map);
		// 遍历map
		Iterator<Entry<String, Object>> iterator = map.entrySet().iterator();
		while (iterator.hasNext()) {
			Entry<String, Object> entry = iterator.next();
			System.out.println(entry.getKey() + " : " + entry.getValue());
		}
		System.out.println(map);
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值