一、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内部实现原理也是迭代,但不方便单个数据的修改。