【Java編程】Foreach對數組、Collection對象、Iterable對象的遍歷

1、foreach介紹及其使用範圍

foreach語句是java5的新特徵之一,在遍歷數組、集合、Iterable對象方面,爲開發人員提供了極大的方便。foreach語句是for語句特殊情況下的增強版本,簡化了編程,提高了代碼的可讀性和安全性(不用怕數組越界)。foreach語法支持對數組、Collection對象、Iterable對象的遍歷。

2、foreach適用於對數組遍歷

		String[] array = {"A","B","C","D","E","F","G"};
		for(String str:array){
			System.out.print(str+" ");
		}

3、foreach適用於對Collection對象遍歷

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.TreeSet;

public class ForeachDemo {
	public static void main(String[] args) {
		String[] array = {"A","A","B","E","F","G","C","D"};
		Collection<String> list = new ArrayList<String>(Arrays.asList(array));
		for(String str:list){////按照被添加的順序保存對象
			System.out.print(str+" ");
		}
		System.out.println();
		Collection<String> linkedList = new LinkedList<String>(Arrays.asList(array));
		for(String str:linkedList){//按照被添加的順序保存對象
			System.out.print(str+" ");//A A B E F G C D 
		}
		System.out.println();
		Collection<String> hashSet = new HashSet<String>(Arrays.asList(array));
		for(String str:hashSet){//無重複,無序,存儲順序並無實際意義
			System.out.print(str+" ");//D E F G A B C 
		}
		System.out.println();
		Collection<String> treeSet = new TreeSet<String>(Arrays.asList(array));
		for(String str:treeSet){//無重複,按照比較結果的升序保存對象
			System.out.print(str+" ");//A B C D E F G 
		}
		System.out.println();
		Collection<String> linkedHashSet = new LinkedHashSet<String>(Arrays.asList(array));
		for(String str:linkedHashSet){//無重複,按照被添加的順序保存對象
			System.out.print(str+" ");//A B E F G C D 
		}
	}
}
代碼優化,利用上轉型抽象出公共方法:
public static void forEachCollection(Collection<String> colleciton){
		for(String str:colleciton){////按照被添加的順序保存對象
			System.out.print(str+" ");
		}
		System.out.println();
	}
測試用例:
public static void listCollection() {
		String[] array = {"A","A","B","E","F","G","C","D"};
		forEachCollection(new ArrayList<String>(Arrays.asList(array)));//A A B E F G C D 
		forEachCollection(new LinkedList<String>(Arrays.asList(array)));//按照被添加的順序保存對象 //A A B E F G C D 
		forEachCollection(new HashSet<String>(Arrays.asList(array)));//無重複,無序,存儲順序並無實際意義//D E F G A B C 
		forEachCollection(new TreeSet<String>(Arrays.asList(array)));//無重複,按照比較結果的升序保存對象//A B C D E F G 
		forEachCollection(new LinkedHashSet<String>(Arrays.asList(array)));//無重複,按照被添加的順序保存對象//A B E F G C D 
	}
3.1、利用迭代遍歷Collection對象:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.TreeSet;

public class ForeachDemo {
	
	public static void printCollection(Collection<String> colleciton){
		Iterator<String> it = colleciton.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		System.out.println();
	}
	
	public static void main(String[] args) {

		String[] array = {"A","A","B","E","F","G","C","D"};
		printCollection(new ArrayList<String>(Arrays.asList(array)));//A A B E F G C D 
		printCollection(new LinkedList<String>(Arrays.asList(array)));//按照被添加的順序保存對象 //A A B E F G C D 
		printCollection(new HashSet<String>(Arrays.asList(array)));//無重複,無序,存儲順序並無實際意義//D E F G A B C 
		printCollection(new TreeSet<String>(Arrays.asList(array)));//無重複,按照比較結果的升序保存對象//A B C D E F G 
		printCollection(new LinkedHashSet<String>(Arrays.asList(array)));//無重複,按照被添加的順序保存對象//A B E F G C D 
	}

}

4、foreach適用於對Iterable對象遍歷:

package com.andieguo.iterabledemo;

import java.util.Iterator;

public class IteratorSequence<T> {
	private T[] array = null;
	public IteratorSequence(T[] array){
		this.array = array;
	}
	public Iterable<T> iterator(){//Iterable能夠用於foreach
		return new Iterable<T>(){
			@Override
			public Iterator<T> iterator() {
				// TODO Auto-generated method stub
				return new Iterator<T>() {
					private int index = 0;
					@Override
					public boolean hasNext() {
						// TODO Auto-generated method stub
						return index < array.length;
					}

					@Override
					public T next() {
						// TODO Auto-generated method stub
						return array[index++];
					}

					@Override
					public void remove() {
						// TODO Auto-generated method stub
						throw new UnsupportedOperationException();
					}
				};
			}};
	}
	public static void main(String[] args) {
		IteratorSequence<String> iteratorSequence = new IteratorSequence<String>(new String[]{"A","B","C"});
		for(String str:iteratorSequence.iterator()){//iteratorSequence.iterator()返回的是一個Iterable<T>實例,支持foreach循環
			System.out.print(str+" ");
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章