现在的位置: 首页 > 综合 > 正文

【Java编程】Foreach对数组、Collection对象、Iterable对象的遍历

2014年09月05日 ⁄ 综合 ⁄ 共 3921字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.