foreach语法
foreach语法1.foreach用于数组:Java SE5 引入了一种新的更加简洁的for语法用于数组和容器,,即foreach语法,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。例如,假设有一个float数组,我们要选取该数组中的每一个元素: public class ForEachFloat {public static void
foreach语法
1.foreach用于数组:
Java SE5 引入了一种新的更加简洁的for语法用于数组和容器,,即foreach语法,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。
例如,假设有一个float数组,我们要选取该数组中的每一个元素:
public class ForEachFloat {
public static void main(String[] args) {
int[] a=new int[10];
for(int i=0;i<10;i++){
a[i]=i;
}
for(int i:a)
System.out.println(i);
}
}
2.foreach用用于任何Iterable对象
到目前为止,foreach主要用于数组,但是它也可以用于任何Collection对象。你实际上看到的很多使用ArrayList时用到的是它的示例,下面是一个更通用的证明:
public class ForEachCollections {
public static void main(String[] args) {
Collection<String> cs=new ArrayList<String>();
Collections.addAll(cs, "nihao zhongguo welcome".split(" "));
for(String s:cs)
System.out.println(s);
}
}
由于cs是一个Collectio,所以这段代码展示了能够与foreach义气工作是所有的Collection对象的特性。至所以能够工作,是因为Java SE5引入了新的被称为Iterable的接口,该接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动,因此如果你创建了产生任何Iterable的类,都将可以将他用于foreach与剧中:
public class IterableClass implements Iterable<String>{
private String[] s="welcome to china".split(" ");
@Override
public Iterator iterator() {
// TODO Auto-generated method stub
return new Iterator(){
int count=0;
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return count<s.length;
}
@Override
public Object next() {
// TODO Auto-generated method stub
return s[count++];
}
@Override
public void remove() {
// TODO Auto-generated method stub
throw new UnsupportedOperationException();
}
};
}
public static void main(String[] args) {
for(String s:new IterableClass())
System.out.println(s);
}
}
Iterator()方法返回的是实现了Iterator<String>的匿名内部类的实例,该匿名内部类可以遍历数组中的所有单词,在main()中,你可以看到IterableClass确实可以用于foreach语句中。
在java SE5中大量的类都是Iterable类型,主要包括所有的Collection类(但是不包括各种MAP).例如,下面的代码可以显示所有的操作系统环境变量:
public class EnvironmentVariables {
public static void main(String[] args) {
for(Map.Entry entry:System.getenv().entrySet()){
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}
System.getntenv()返回一个map,entrySet()产生一个由Map.Entry元素构成的Set,并且这个Set是一个Iterable,因此他可以用于foreach循环。
Foreach语句可以用于数组和任何其他的Iterable,但是这并不意味着数组肯定是个Iterable,而任何自动包装也不会自动发生:
public class ArrayIsNotIterable {
static<T> void test(Iterable<T> tb){
for(T t:tb)
System.out.println(tb);
}
public static void main(String args){
test(Arrays.asList(1,2,3));
String[] strings={"a","b","c"};
//An array works in foreach ,but it's not Iterable
//!test(strings);
test(Arrays.asList(strings));
}
}
更多推荐
所有评论(0)