栏目:Java8基础 作者:admin 日期:2015-10-31 评论:0 点击: 2,800 次
foreach语句是java5的新特征之一,在遍历数组、集合、Iterable对象方面,为开发人员提供了极大的方便。foreach语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。foreach语法支持对数组、Collection对象、Iterable对象的遍历。
foreach对于元素持有对象来说,必须实现Iterable接口。这里Set, List,Queue都继承Collection接口,而Colleciton接口继承于Iterable,所以Java库中提供的Set类,List类,Queue类都可以使用foreach来遍历持有的元素。
比较特别的是foreach可以用于对基本数据类型数组和String数组的遍历。用法与上述没有区别。
1 2 3 4 5 |
import java.util.Iterator; public interface Iterable { public abstract Iterator iterator(); } |
该接口中定义了产生Iterator迭代器的方法:
1 2 3 4 5 6 7 8 |
public interface Iterator { public abstract boolean hasNext(); public abstract Object next(); public abstract void remove(); } |
因此如果自己建的一个类也实现了Iterable接口,并且实现了具体产生Iterator的方法,foreach方法也是同样适用于新建类的,结合适配器模式的一个样例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Random; public class IteartorClass implements Iterable<String> { protected static final String[] WORDS = "this is swiftlet net".split(" "); @Override public Iterator<String> iterator() { return new Iterator<String>() { private int index = 0; public boolean hasNext() { return index < WORDS.length - 1; } @Override public String next() { return WORDS[index++]; } @Override public void remove() { } }; } public static void main(String[] args) { mutileIteratorClass class1 = new mutileIteratorClass(); for (String string : class1.randomNized()) { System.out.print(string + " "); } System.out.print("n"); for (String string : class1.reversed()) { System.out.print(string + " "); } } } class mutileIteratorClass extends IteartorClass { public Iterable<String> reversed() { return new Iterable<String>() { public Iterator<String> iterator() { return new Iterator<String>() { private int index = WORDS.length - 1; public boolean hasNext() { return index >= 0; } public String next() { return WORDS[index--]; } public void remove() { } }; } }; } public Iterable<String> randomNized() { return new Iterable<String>() { public Iterator<String> iterator() { List<String> list = new ArrayList<String>(Arrays.asList(WORDS)); Collections.shuffle(list, new Random(20)); return list.iterator(); } }; } } |
------====== 本站公告 ======------
金丝燕网,一个严谨的网站!