All,
只是编程初学者。我正在探索java集合和迭代器,我想知道如何使用游标来迭代集合。
public class Collections {
public void myFun()
{
int i=0;
List<String> listObj = new ArrayList<String>();
listObj.add("Hello");
Iterator<String> itr = listObj.iterator();
while(itr.hasNext())
{
String s=(String)itr.next();
System.out.println(" List Elements are : " +s);
}
}
public static void main(String[] args) {
Collections collObj = new Collections();
collObj.myFun();
}
}
根据我的理解,listObj变量的内部存储器表示如下所示,
listObj Representation in memory
----------------------------------------
| 45654846 | null | null | .... | null
----------------------------------------
[0] [1] [2] ... [10]
.
/|\
|
|
|
itr (Cursor)
我的问题在于下面一行,
while(itr.hasNext())
在上面的示例中,hasNext() 返回 True。但根据我的理解,index[1] 中没有元素,因此它应该返回 false。但它返回 true。请帮助我理解这个逻辑。
itr.next() 返回值 - “Hello”。但根据我的理解,它需要返回数组列表中的下一个元素,因为它已经指向索引[0]。
另外,我在调试模式下查看了迭代器对象,
NAME VALUE
----- -------
itr ArrayList$Itr (id=45)
|_ cursor 0
|_ expectedModCount 1
|_ lastRet -1
|_ this$0 ArrayList<E> (id=28)
|_ [0] "Hello" (id=40)
- 你能解释一下什么是lastRet吗?它有与我的问题相关的地方吗?
- 游标始终指向索引[0],这意味着数组 List 中的第一个元素。请澄清我的理解。
问候,
机器人
hasNext()
第一次调用它时将返回 true (在调用之前next()
),因为下一个元素是列表的第一个元素,并且您的列表只有一个元素。
第一次打电话的时候itr.next()
,它返回列表的第一个元素。
cursor
是调用返回的下一个元素的索引next()
:
/**
* Index of element to be returned by subsequent call to next.
*/
int cursor = 0;
lastRet
是返回的最后一个元素的索引(通过最后一次调用next()
):
/**
* Index of element returned by most recent call to next or
* previous. Reset to -1 if this element is deleted by a call
* to remove.
*/
int lastRet = -1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)