1. 程式人生 > 實用技巧 >Java迭代器

Java迭代器

package com.qf.demo02;

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

public class Test3Iterator {
	public static void main(String[] args) {
		Collection<String> c1 = new ArrayList<String>();
		c1.add("aaa");
		c1.add("bbb");
		c1.add("ccc");
		
		//問題:如何獲取集合中的元素?
		//方法一:for-each:增強for迴圈
		/*
		 * 語法原理:
		 * for(資料型別 變數名 : 陣列/集合){
		 * 	列印變數名即可。
		 * }
		 */
		for(String s:c1){
			System.out.println(s);
			//aaa
			//bbb
			//ccc
		}
		
		//方法二:Iterator,迭代器,依次獲取集合中的元素。。
		/*
		 * Iterator介面:
		 * 	hasNext()-->boolean,判斷是否有下一個元素
		 * 	next()-->元素,獲取元素
		 */
		//step1:從該集合上獲取迭代器物件--->it,介面型別的
		//介面型別 =  物件
		// 介面  		  介面引用   = new 實現類物件();
		//Collection c1     = new ArrayList();
		Iterator<String> it = c1.iterator();//c1.iterator(),該方法,專門獲取c1集合上的迭代器物件
		//介面型別  = 呼叫方法();
		
		//安裝jdk1.8--->String,Object,Arrays,語法。。。Math,Random....
		//Collection介面,..add(),remove();iterator()...
		//ArrayList實現類,LinkedList,hashSet...
		
		//step2:
		//判斷迭代器物件,是否有下一個元素
//		boolean b1= it.hasNext();
//		System.out.println(b1); //true
//		//A:獲取迭代器後的物件,B:迭代器向後移動一下
//		String s1 = it.next();
//		System.out.println(s1);//aaa
//		
//		
//		boolean b2 = it.hasNext();
//		System.out.println(b2);//true
//		String s2 = it.next();
//		System.out.println(s2);//bbb
//		
//		boolean b3 = it.hasNext();
//		System.out.println(b3);//true
//		
//		String s3 = it.next();
//		System.out.println(s3); //ccc
//		
//		boolean b4 = it.hasNext();
//		System.out.println(b4);//false
//		
//		String s4 = it.next(); //java.util.NoSuchElementException
//		System.out.println(s4);
		
		while(it.hasNext()){//判斷it後是否有下一個元素
			String s = it.next();//獲取it後的這個元素,並向後移動一下。
			System.out.println("--->"+s);
		}
	
	}
}
package com.qf.demo02;

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

public class Test4Iterator {

	public static void main(String[] args) {
//		迭代器在工作期間,不要去更改集合的結構。
		Collection<String> c1 = new ArrayList<String>();
		c1.add("aaa");
		c1.add("bbb");
		c1.add("ccc");
		//---->迭代器物件
		
		System.out.println(c1);
		
		Iterator<String> it = c1.iterator();//從集合上獲取的迭代器物件:it
		while(it.hasNext()){
			String s = it.next();
			System.out.println(s);
		}
		
		System.out.println("----------");
		//迭代的注意點:1.一個迭代器物件,從頭迭代到後,不能再使用了,因為後面沒有元素了,迭代不出來了。。
		while(it.hasNext()){
			String s2 = it.next();
			System.out.println(s2);
		}
		//2.迭代器工作期間:不能更改集合中的元素的個數。
		Iterator<String> it2 = c1.iterator();
		//it2--> aaa		bbb		ccc
		String s3 = "";
		while(it2.hasNext()){//迭代器在工作期間,相當於鎖定了這個集合容器。集合本身不要去刪除資料。
		
			if("bbb".equals(s3)){
//				c1.remove("bbb");//操作集合,刪除一個元素:"bbb" ,java.util.ConcurrentModificationException
				it2.remove();//瞭解。。
			}
			s3 = it2.next();//aaa ,bbb
			System.out.println(s3);
		}
		System.out.println(c1);
	
		
	}

}