我们先来回忆一下Java中的迭代器的用法,可以使用迭代器的有List和Set集合。原因在于它们都实现了Collection接口,而Collection接口拥有一个叫做Iterable父接口。下面我们来看一个案例:
public class Demo {
@Test
public void demo() {
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String string = iterator.next();
System.out.println(string);
}
}
}
在Java 5版本后,提供了加强For循环来替代原本的迭代器。我们来看以下代码:
public class Demo {
@Test
public void demo() {
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
for (String string : list) {
System.out.println(string);
}
}
}
通过以上两段代码,我们可以看出,输出结果是完全一样。但是,在写法上,加强For循环更加简洁。
在实际使用中,加强For循环都有哪些作用呢?我们分别来讨论一下。
public class Demo {
@Test
public void demo() {
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
for (String string : list) {
System.out.println(string);
}
}}
public class Demo {
@Test
public void demo3() {
String[] arr = { "hello", "world" };
for (String string : arr) {
System.out.println(string);
}
}
}
掌握了加强For循环的用法,下面我们就来思考一下,加强For循环在实际运用中,有哪些需要注意的问题呢?
既然加强For循环可以遍历所有实现Iterable接口的集合,那我们可以不可以自定义一个实现Iterable接口的集合,再利用加强For来遍历呢?
下面我们就自定义一个实现Iterable接口的集合类:
public class Word implements Iterable {
private String[] words;
public Word(String s) {
words = s.split("\\s+");
}
@Override
public Iterator iterator() {
return new Iterator() {
private int index = 0;
public boolean hasNext() {
return index < words.length;
}
public Object next() {
return words[index++];
}
public void remove() {}
};
}
}
然后,我们进行测试:
public class Demo {
@Test
public void demo4() {
Word word = new Word(
"hello world javaWeb css html el jstl jsp servlet response");
for (Object obj : word) {
System.out.println(obj);
}
}
}
转载说明:请注明作者及原文链接,谢谢!
原文地址:http://blog.csdn.net/longestory/article/details/46292713