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+" ");
}
}
}