JAVA iterator 迭代器模式的next() 的问题 求高手回答 谢谢! 真诚求学 在线等。
我看书的时候书上说了两种方法去实现next()第一个是数列,第二个是link。但是我对书上说的有质疑。它在第一种方法返回的是returnlist[current-1](它...
我看书的时候书上说了两种方法去实现 next() 第一个是数列,第二个是link。
但是我对书上说的有质疑。 它在第一种方法返回的是 return list[current-1] (它注解上说的是"@return iteration的下一个元素",但是current++ 后的current-1不是下一个元素啊!!!,而是原来的current吧。举个例子: 比如说原来是current[4], 4++=5,现在又返回回current[4]罢了,理应返回的是current[5]才对呀! )
第二种方法里存在同一个问题,返回的都不是下一个元素,但注解说是下一个。请大侠细看,谢谢! 展开
但是我对书上说的有质疑。 它在第一种方法返回的是 return list[current-1] (它注解上说的是"@return iteration的下一个元素",但是current++ 后的current-1不是下一个元素啊!!!,而是原来的current吧。举个例子: 比如说原来是current[4], 4++=5,现在又返回回current[4]罢了,理应返回的是current[5]才对呀! )
第二种方法里存在同一个问题,返回的都不是下一个元素,但注解说是下一个。请大侠细看,谢谢! 展开
1个回答
展开全部
关于你的疑问,请参考我的学习笔记吧。
hasNext、next方法:迭代器用于遍历集合元素。获取迭代器可以使用Collection定义的方法:Iterator iterator()
迭代器Iterator 本身是一个接口,集合在重写Collection的iterator()方法时利用内部类提供了迭代器的实现。Iterator提供了统一的遍历集合元素的方式,其提供了用于遍历集合的两个方法:boolean hasNext()判断集合是否还有元素可以遍历。
E next() 返回迭代的下一个元素。
每一种集合的实现类都是各自的迭代器实现,不用关心具体迭代器的类型,只将他们当作迭代器用于遍历集合元素即可。应当遵循“问-取-删”模式,适用于while循环。
Iterator<String>it = c1.iterator(); --- 问的过程,询问c1集合中是否还有元素
while( it.hasNext() )
{
String str = (String) it.next(); --- 取出来的是Object类型,所以需要转换类型
}
注意:应建立在hasNext返回true的基础上执行next()方法
迭代过程中,不能调用集合的相关方法来改变集合中的元素,不然会抛出异常。应使用迭代器自身提供的方法操作。迭代器的删除方法是在原集合中删除元素。在调用remove方法前必须通过迭代器的next()方法迭代过元素,那么删除的就是这个元素,并且不能连续接着调用remove。
While( it.hasNext() )
{
String str = (String) it.next();
if(“#”.equals ( str ) )
{ //凡是相互比较,应当让字变量.equals(变量),可以避免遇到null空指针异常
it.remove();
}
}
hasNext、next方法:迭代器用于遍历集合元素。获取迭代器可以使用Collection定义的方法:Iterator iterator()
迭代器Iterator 本身是一个接口,集合在重写Collection的iterator()方法时利用内部类提供了迭代器的实现。Iterator提供了统一的遍历集合元素的方式,其提供了用于遍历集合的两个方法:boolean hasNext()判断集合是否还有元素可以遍历。
E next() 返回迭代的下一个元素。
每一种集合的实现类都是各自的迭代器实现,不用关心具体迭代器的类型,只将他们当作迭代器用于遍历集合元素即可。应当遵循“问-取-删”模式,适用于while循环。
Iterator<String>it = c1.iterator(); --- 问的过程,询问c1集合中是否还有元素
while( it.hasNext() )
{
String str = (String) it.next(); --- 取出来的是Object类型,所以需要转换类型
}
注意:应建立在hasNext返回true的基础上执行next()方法
迭代过程中,不能调用集合的相关方法来改变集合中的元素,不然会抛出异常。应使用迭代器自身提供的方法操作。迭代器的删除方法是在原集合中删除元素。在调用remove方法前必须通过迭代器的next()方法迭代过元素,那么删除的就是这个元素,并且不能连续接着调用remove。
While( it.hasNext() )
{
String str = (String) it.next();
if(“#”.equals ( str ) )
{ //凡是相互比较,应当让字变量.equals(变量),可以避免遇到null空指针异常
it.remove();
}
}
更多追问追答
追问
你没有回答我的问题。。你回答的东西都是与我问题无关的。。。。
追答
你没有真正的理解迭代器,你这种自学方式属于钻牛角尖,去研究一些不需要清楚的问题,知道怎么用迭代器就行了,人家老外写的源代码你死命去分析有用吗?迭代器提供给你两个方法,
hasNext next 任何集合都可以拿过来用,实际工作中也是这么用的,你非研究为什么是list有意义吗?
还有人家老外给你写了英文备注,你不会看啊。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询