淺談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接口的一些淺見,若有不足或錯誤之處,歡迎評論指正。

相關文章
相關標籤/搜索