【发布时间】:2014-11-29 10:36:28
【问题描述】:
全部,
只是编程的初学者。我正在探索 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。但它返回真。请帮助我理解这个逻辑。
itr.next() 返回值 - “Hello”。但据我了解,它需要返回 Array List 中的下一个元素,因为它已经指向 index[0]。
另外,我已经在调试模式下查看了迭代器 obj,
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 中的第一个元素。请澄清我的理解。
问候, 半机械人
【问题讨论】:
标签: java collections iterator cursor