深入理解foreach循環

foreach循環是JavaSE5.0的新特性,foreach循環只能作用於2種情況:

一:數組;

二:實現了iterable接口;

數組不需要驗證,很熟悉,演示第二種情況,並且採用一個逆序的方式演示:

class ReverseList<E> extends ArrayList<E>{
	
	public ReverseList(Collection<E> c){
		super(c);		
	}
	
	public Iterable<E> reverse(){
		return new Iterable<E>(){

			@Override
			public Iterator<E> iterator() {
				
				return new Iterator<E>(){
					private int i = size() - 1;
					@Override
					public boolean hasNext() {
						return i>=0;
					}

					@Override
					public E next() {
						return get(i--);
					}

					@Override
					public void remove() {
						throw new UnsupportedOperationException();
					}
					
				};
			}
			
		};
		
	}
	
}

測試示例:

public class ForeachTest {
	
	@Test
	public void testForeach(){
		String strs = "I have a dream";
		ReverseList<String> list = new ReverseList<String>(Arrays.asList(strs.split(" ")));
		for(String str : list){
			System.out.print(str + " ");
		}
		System.out.println();
		for(String str : list.reverse()){
			System.out.print(str + " ");
		}
		
	}
	
}

輸出結果:

I have a dream 
dream a have I 

從結果可以看出,實現了iterable接口,就可以使用foreach增強循環;

平常我們經常使用foreach循環,原因是Collection接口直接從Iterable接口繼承了,所以我們能使用這個增強循環;而且從調用reverse方法可以看出,foreach第二個參數實際上傳的是一個Iterable接口;

另外需要注意2個接口的區別,iterable接口,裏面只有一個操作方法,即iterator方法,用於返回一個Iterator接口;而Iterator接口,裏面三個方法,hasNext,next,remove


發佈了116 篇原創文章 · 獲贊 15 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章