迭代器和foreach循环

遍历不同容器的元素,如果为每个容器都设计一套遍历方法,会很麻烦。迭代器Iterator提供了这样的便利,它可以遍历并且得到容器中的对象,而不必关心容器的具体类型。

Java的Iterator只能单向移动。

Iterator由实现了Iterable接口的类的iterator()方法 返回,初始时指向第一个元素前的位置。next()向后移动时指向2个元素之间的位置。remove()方法删除next()方法返回的元素。如果没有更多元素,remove和next会抛出异常,所以在进行遍历前要用hasNext方法判断是否包含下个元素。

任何实现Iterable接口的类,既可以使用迭代器,也可以使用foreach循环遍历元素

	public static void main(String[] args) {
		Set<String> set = new HashSet<String>();
		set.add("abc");
		set.add("def");
		
		Iterator<String> iterator = set.iterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}
		
		for (String s : set) {
			System.out.println(s);
		}
	}

可以自己实现Iterator接口以使用foreach循环 

public class Test implements Iterable<String>{

    private ArrayList<String> words;
	
	public static void main(String[] args) {
		Test t = new Test();
		t.insert("abc");
		t.insert("def");
	    for (String s : t) {
	    	System.out.println(s);
	    }
	}
	
	public Test() {
		words = new ArrayList<String>();
	}
	
	public void insert(String word) {
		words.add(word);
	}
     
	@Override
	public Iterator<String> iterator() {
		
		return new Iterator<String>() {
			private int index = 0;

			@Override
			public boolean hasNext() {
				return index < words.size();
			}

			@Override
			public String next() {
				return words.get(index++);
			}

			@Override
			public void remove() {
				words.remove(index);
			}
		};
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值