黑马程序员技术交流社区
标题:
迭代器的运行流程是什么?
[打印本页]
作者:
郭孟涛
时间:
2013-7-1 16:20
标题:
迭代器的运行流程是什么?
一直搞不清楚迭代器是一个什么样的运行流程。越分析思路越乱。实在想不明白
作者:
j816326
时间:
2013-7-1 16:30
迭代器是个接口,里面有三个方法。
boolean hasNext()
如果仍有元素可以迭代,则返回 true。
E next()
返回迭代的下一个元素。
void remove()
从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
内部封装的肯定有实现这些方法的代码,如果你英语过关的话,可以去查查源代码,可以很容易查到。但看得懂看不懂就要靠你自己了。
作者:
贾永长
时间:
2013-7-1 16:39
迭代:一个个的数过去,
迭代器:实现这样一个个数过去功能的东西。
java迭代器: 一般使用在容器中(如:数组链表、ArrayList)。
如:
//1:往链表中装东西
ArrayList a = new ArrayList();
a.add("东西1");
a.add("东西2");
//2:从链表中取东西--------》这时就用到了迭代器
流程:
Iterator iter = a.iterator() ; //iter迭代器对象,用它来数
while(iter.hasNext()) //先往左数,如果有东西就执行{}里的语句
{
String m = (String)iter.next(); //把数到的赋值给m
System.out.println(m); //打印输出m
}
作者:
蚂蚁搬家
时间:
2013-7-1 16:56
我写的学习笔记:
--------------------------------------------------------------------------------------------------------------
11,java.util.Iterator接口下方法之hasNext():boolean hasNext(),判断当前游标位置的后面是否还有元素,有则返回true,否则返回false;
12,Iterator接口下方法之next:Object next():返回当前游标右边的元素,然后游标右移一个位置;
13,Iterator接口下方法之remove:删除最近返回的元素,在调用remove之前,必须先调用一次next,而且在调用next后只能调用一次remove;不推荐使用remove;
17,用迭代器输出元素的两种写法比较:法一:
Iterator it = al.iterator(); //此方式返回的是Iterator接口的实现类;
while(it.hasNext())
{
System.out.println(it.next());
}
法二:
for(Iterator it = al.iterator(); it.hasNext();)
{
System.out.println(it.next());
}
虽然方法一和方法二都返回了Iterator的实现类,但方法二的返回值只是for语句的局部变量,循环结束后,内存就收回了,而方法一的返回语句在while循环外面,循环结束后,Iterator接口还在占用内存,而且是内存垃圾,从内存管理的角度来看,推荐使用方法二;
18,List集合特有的迭代器、Iterator的子接口:ListIterator:在迭代时,不能通过集合的方法对元素进行操作,否则会发生并发修改异常ConcurrentModificationException,所以在迭代时,只能用迭代器的方法对元素进行操作,而Iterator的方法只有hasNext、next、remove三个方法,无法满足需求,于是就有了Iterator的子接口ListIterator,该接口只能通过List集合的listIterator方法获取,该接口有add、set、remove、previous(返回游标左边的元素)、hasPrevious(判断游标的左边是否有元素)等;
作者:
孙百鑫
时间:
2013-7-1 18:21
问题解决、请联系我
作者:
肥猫
时间:
2013-7-1 19:46
补充还有一点很重要的就是通过迭代器遍历之后的集合本身并不会改变,这点要特别注意.~~
作者:
刘_鑫
时间:
2013-7-1 23:45
集合对象的iterator()方法 返回迭代器对象
迭代器对象中的hasNext()方法,判断是否有下一个可迭代的元素,有就返回true
next()返回迭代的下一个元素
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2