一、java的迭代器的用法:
1)使用方法 iterator()要求容器返回一个 Iterator。第一次调用Iterator 的next()方法时,它返回序列的第一个元素。
2)使用next()获得序列中的下一个元素。
3)使用hasNext()检查序列中是否还有元素。
4)使用remove()将上一次返回的元素从迭代器中移除。
其中hasNext()方法的作用
代码:
while(it.hasNext()){
Course cr = (Course) it.next();
System.out.println("课程"+cr.id+":"+cr.name);}
用到数据结构知识,拿ArrayList为例 这个集合的底层结构是一个可变长度的数组,是一个有序的集合,使用迭代器迭代的时候 会找到第一个元素然后进行操作,并不会将这个元素从集合中删除,然后再来判断这个元素的后面是否还有元素,如果有,继续迭代,所以你迭代完成后,集合中的元素仍然在集合中,实际上一般的迭代器在迭代的时候并不能增删集合中的元素(即使你想加入代码来达到这个效果也是不行的),这样会发生并发性访问异常。
二、效率:
(1)
Iterator it = list.iterator();
while (it.hasNext()) {
studentID= (String) it.next();
}
(2)
for(int i=0;i<list.size();i++){
studentID=(String)list.get(i);
}
(1)比较(2)有什么优点吗?
首先:
itertor即枚举器,枚举器是Java在后台自动排序好,比纯粹的for循环要快,因为如果用 for循环,也需要将List中的对象依次取出,这样对内存的调用是随机的,不如Iterator。
其次:
当你在循环内要使用索引的时候,for就比iterator好一些,否则iterator还要在声明一个变量,然后在递增。
第三:
以后代码改了,list不在是list接口了,而是set接口(没有get(i)方法),这时代码改动就大了,for里面全部要重写,而你老大的代码几乎不用任何修改,当然这也牺牲了部分性能。
第四:
-----测试ArrayList-----------
iterator操作:80ms
get操作:40ms
--------测试LinkedList-----------
iterator操作:110ms
get操作:140ms
总结:
用iterator迭代属于面向对象编程。更加符合JAVA本身。另外学过数据结构的都应该了解LinkedList,是以链表为基础实现,链表便于顺序访问。
在操作的时候,查快改慢。ArrayList,顾名思义,以数组方式实现,便与随机访问,查慢改快。foreach内部实现原理也是迭代,但不方便单个数据的修改。
浙公网安备 33010602011771号