C与JAVA对比的第二篇:
迭代器是一个我平常写题很不重视的一个方面,导致一些简单题会因为语法问题卡很久…现在既然JAVA学到了迭代器的使用,那我也来顺便做个总结吧。
一:迭代器是什么,有什么用?
迭代器是对C++stl容器和JAVA API类内部元素下标访问的一个方法,由于本身不支持数组的直接访问(除vector和map),需要通过迭代器进行访问,由于在像map这样的容器往往不知道内部元素个数,因此迭代器也能进行一个较好的访问和避免越界。
二:迭代器的创建:
C++中有分为iterator和auto两种迭代器,auto可以直接作为一个数据类型创建,方法如下(以set为例):
set<int>smap;
for(int i=1;i<10;++i)
smap.insert(i);
auto it = smap.begin();
而iterator稍复杂些,方法如下:
set<int>::iterator iter;//创建一个从容器的begin开始的迭代器
JAVA的创建也非常简单:
Collection<String> c = new ArrayList<String>();
c.add("blue");
c.add("eyes");
c.add("white");
c.add("dragon");
Iterator<String> it =c.iterator();
三:迭代器的遍历
C++中迭代器可以直接当做指针使用遍历,auto与iterator没有区别,获取元素也是如同指针一般在前面加*,方法如下:
while(it!=smap.end()){
cout<<*it<<" ";
it++;
}
JAVA则是提供了一个方法来访问和获取元素,即next(),作用是跳转到下一元素以及返回当前元素值,方法如下:
while(it.hasNext()){
System.out.printf(it.next()+" ");
}
//blue eyes white dragon
另外,由于迭代器的遍历过程中每次都会比较预期修改次数和实际修改次数,如果不同的话就会产生并发修改异常,因此,在使用迭代器对容器进行遍历时,不能够增减元素,否则会导致迭代器失效。
以上