美文网首页
foreach与迭代器

foreach与迭代器

作者: 998584f56259 | 来源:发表于2016-10-26 11:09 被阅读39次

foreach语法主要用于数组,但是它也可以应用于任何Collection对象。如下:

import java.util.*;

public class ForEachCollections {
public static void main(String[] args) {
  
Collection<String> cs = new LinkedList<String>();
Collections.addAll(cs,
  "Take the long way home".split(" "));
for(String s : cs)
  System.out.print("'" + s + "' ");
}
} /* Output:
'Take' 'the' 'long' 'way' 'home'
*///:~

因为cs是一个Collection,所以这段代码展示了能够与foreach一起工作是所有的Collection对象的特性。之所以能够工作是因为在Java SE5中引入了新的被称为Iterable的接口,该接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动,如果我们创建了额任何实现了Iterable的类,都可以用于foreach语法中。

import java.util.*;

public class IterableClass implements Iterable<String> {

protected String[] words = ("And that is how " +
"we know the Earth to be banana-shaped.").split(" ");

public Iterator<String> iterator() {
return new Iterator<String>() {
    
  private int index = 0;
  
  public boolean hasNext() {
    return index < words.length;
  }
  
  public String next() { return words[index++]; }
  
  public void remove() { // Not implemented
    throw new UnsupportedOperationException();
  }
  
}; 
}   

public static void main(String[] args) {
for(String s : new IterableClass())
  System.out.print(s + " ");
}


} /* Output:
And that is how we know the Earth to be banana-shaped.
*///:~

iterator()方法返回的是实现了Iterator<String>的匿名内部类的实例,该匿名内部类可以遍历数组中的所有单词。

注意,foreach可以用于数组和Collection中,但是并不能用于Map中,还有就是数组可以使用foreach语句,但是并不意味着数组肯定也是一个Iterable。

import java.util.*;

public class ArrayIsNotIterable {

static <T> void test(Iterable<T> ib) {
for(T t : ib)
  System.out.print(t + " ");
}

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);
// You must explicitly convert it to an Iterable:
test(Arrays.asList(strings));
}
} /* Output:
1 2 3 A B C
*///:~

尝试把数组当做一个Iterable参数传递会导致失败,这说明不存在数组到Iterable的自动转换。

相关文章

  • 迭代器与foreach

    对于“foreach”增强型for循环和集合框架中的“Iterator”想必都不会陌生,今天记录一下关于“迭代器”...

  • foreach与迭代器

    foreach语法主要用于数组,但是它也可以应用于任何Collection对象。如下: 因为cs是一个Collec...

  • 迭代器模式

    内部迭代器和外部迭代器 简单地讲,内部迭代器就是类似 forEach 的迭代器,其内部迭代逻辑已经制定好,只要传入...

  • Java 几种循环方式

    1、java循环分类 Iterator、for、foreach、Stream.forEach 2、java迭代器I...

  • 2022-05-12

    foreach语法foreach语法用于: 数组(chapter16) 容器 (chapter17) 迭代器 It...

  • 数组(Array)<迭代器>

    一、Js数组迭代器方法 主要介绍js数组中的forEach,every,some,filter,map迭代器方法 ...

  • java中循环的几种方式

    一、for 二、forEach 三、迭代器 For Each的效率差,用迭代器的效率也没有很好。for循环最优,因...

  • js设计模式:迭代器

    1.内部迭代器模式 简单的来说就是forEach的实现 2.外部迭代器 用next迭代直到完成,通常由next, ...

  • foreach遍历ArrayList和数组

    遍历ArrayList的方式有迭代器,foreach循环,get(i)等方式。其中迭代器和get方法都有具体的代码...

  • LinkedList,ArrayList 遍历效率

    LinkedList,ArrayList 遍历效率, 分别使用迭代器Iterator,foreach,for方式进...

网友评论

      本文标题:foreach与迭代器

      本文链接:https://www.haomeiwen.com/subject/jyuduttx.html