Iterator是不是只能和List一起用?

来源:百度知道 编辑:UC知道 时间:2024/05/19 12:29:51
还有既然以下两种方法结果一样, 为什么还需要Iterator?
ArrayList<String> x = new ArrayList<String>();
x.add("hehe");
x.add("hihi");
x.add("haha");
for (String y: x) {
System.out.println(y);
}
for (Iterator<String> i = x.iterator(); i.hasNext();) {
System.out.println(i.next());
}

只要有.iterator()的类都能用(大部分的collection类):
AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayList, AttributeList, BeanContextServicesSupport, BeanContextSupport, ConcurrentLinkedQueue, CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingQueue, LinkedHashSet, LinkedList, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, Stack, SynchronousQueue, TreeSet, Vector

使用上的区别在于如果你想要删除正在读的内容的话必须要用Iterator:

for(String y : x) {
x.remove(y); //会出ConcurrentModificationException
}

for (Iterator<String> i = x.iterator(); i.hasNext();) {
i.remove(); //不会出错
}

凡是实现了Iterable接口的类(比如List, Set)都能够返回一个Iterator。

第一种写法实际上在编译的时候被转化成了第二种方法,只不过第一种方法写起来更方便。所以Iterator是必须的,因为第一种方法隐含地使用了Iterator。

只有数组以及实现了Iterable接口的类才能够采用for( : )这样的写法。

Set 也可以啊 ~~~
set.iterator()

好多。。。