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

来源:互联网 发布:淘宝怎样投诉盗图 编辑:程序博客网 时间:2024/05/17 04:20

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能够用于foreachreturn new Iterable<T>(){@Overridepublic Iterator<T> iterator() {// TODO Auto-generated method stubreturn new Iterator<T>() {private int index = 0;@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn index < array.length;}@Overridepublic T next() {// TODO Auto-generated method stubreturn array[index++];}@Overridepublic void remove() {// TODO Auto-generated method stubthrow 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+" ");}}}


原创粉丝点击