Java的集合类可以使用for ... each循环
List
Set
Queue
Deque
我们以List为例 其实一个java编译器并不知道如何遍历一个List
编译器只是把一个for ... each 通过Iterator改写成普通的for循环
List list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
for (String str : list) {
System.out.println(str);
}
List list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
for (Iterator iterator = list.iterator(); iterator.hasNext(); ) {
String str = iterator.next();
System.out.println(str);
}
如何让自己编写的集合类使用for..each循环
实现Iterable接口
返回Iterator对象
用Iterator对象迭代
我们自己编写一个集合类ReadOnlyList
public class IteratorTest {
public static void main(String[] args) {
ReadOnlyList readOnlyList = new ReadOnlyList<>("a","b","c");
for (String str : readOnlyList){
System.out.println(str);
}
}
}
public class ReadOnlyList implements Iterable {
E[] array;
@SafeVarargs
public ReadOnlyList(E... array) {
this.array = array;
}
@Override
public Iterator iterator() {
return new ReadOnlyIterator();
}
class ReadOnlyIterator implements Iterator {
int index = 0;
@Override
public boolean hasNext() {
return index < ReadOnlyList.this.array.length;
}
@Override
public E next() {
E e = array[index];
index++;
return e;
}
}
}
运行结果
a
b
c