浅谈Java中的Iterator接口

这是我参与更文挑战的第16天,活动详情查看: 更文挑战markdown

使用lambda表达式遍历集合

Java8为Iterable接口新增了一个forEach(Consumer action)默认方法,该方法的参数是一个函数接口。而Iterable接口是Collection接口的父接口,所以Collection也能够直接调用forEach方法。app

由于forEach(Consumer action)须要的是一个函数式接口,所以能够用Lambda表达式来遍历集合元素。以下例:函数

public class Test {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add(1);
		c.add(2);
		c.add(3);
		c.add(4);
		c.forEach(obj -> System.out.println(obj));
	}
}
复制代码

程序调用了Consumer中的惟一抽象方法accept(T t)。post

使用Iterator遍历集合元素

Iterator接口的对象也被称为迭代器。ui

Iterator接口中包含以下方法:url

boolean hasNext():若是迭代器中的集合元素还没遍历完,返回true

Object next():返回集合中的下一个元素
//查看该方法的源码可知,next是从-1开始的,所以首次调用的时候返回的就是索引为0的元素。

void remove():删除集合里上一次next方法返回的元素

void forEachRemaining(Consumer action):该方法使用Lambda表达式来遍历集合元素
复制代码

来看具体例子:spa

public class Test {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add(1);
		c.add(2);
		c.add(3);
		c.add(4);

		Iterator iter = c.iterator();
		while(iter.hasNext()){
                        //next返回的元素是object类型,所以须要强制转换
			int num = (Integer) iter.next();
			if(num==2){
				iter.remove();
			}
			System.out.println(num);
		}
		System.out.println("删除以后的集合是"+c);
	}
}
复制代码

使用Lambda表达式遍历Iterator

使用Iterator中新增的forEachRemaining(Consumer action)来遍历集合,此方法须要的参数也是一个函数式接口,所以能够使用Lambda表达式。3d

来看具体例子:code

public class Test {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add(1);
		c.add(2);
		c.add(3);
		c.add(4);

		Iterator iter = c.iterator();
		iter.forEachRemaining(obj -> System.out.println(obj));
	}
}

复制代码

使用foreach循环遍历集合元素

foreach和Iterator接口相似,foreach中的循环变量也不是集合元素自己,而是集合元素的值。修改该值并不会影响集合元素。而且使用foreach时不能修改集合元素,不然会引发ConcurrentModinficationException异常。orm

来看具体例子:

public class Test {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add(1);
		c.add(2);
		c.add(3);
		c.add(4);

		for(Object i : c){
			int num = (Integer)i;
			System.out.println(num);
			if(num==2){
				//引发异常
				c.remove(num);
			}
		}
	}
}
复制代码

以上就是我对Iterator接口的一些浅见,若有不足或错误之处,欢迎评论指正。

相关文章
相关标签/搜索