其中矩形是指接口,椭圆形是指实现类。
Iterable接口
Collection继承了Iterable接口,这表明所有集合元素都是可迭代的,可遍历的。就可以实现加强for循环。这个接口里面有一个iterator()方法,返回一个类型为T的迭代器。
比如
ts.iterator()就会返回一个Iterator<String>类型的迭代器。
public static void main(String[] args) {
HashSet<String> hs = new HashSet<>();
TreeSet<String> ts = new TreeSet<>();
hs.add("a");
hs.add("b");
ts.add("c");
display(hs.iterator());
display(ts.iterator());
}
private static void display(Iterator<String> it){
int count = 0;
while(it.hasNext()){
count++;
String s = it.next();
System.out.println(s);
Iterator接口
对于具有不同数据结构的集合,提供了统一的遍历方法,解耦合,不用关注集合内部,假设没有iterator接口,遍历的时候只能通过索引,使用的数据结构变了,就要换一种写法。这样相当于是把遍历的方法抽取出来,交给iterator处理。
那为什么有个Iterator还要有Iterable?
iterator中的方法都是严重依赖于指针的,就是目前迭代的位置,如果没有iterable,那么比如上述代码,hs和ts都需要遍历,那么next()方法可能就会不知道是哪一个集合,会受到干扰。但是如果有了Iterable,其中的iterator()方法,每次调用都会返回一个从头开始的迭代器,不会和其他的迭代器相互干扰。
|