Java集合中迭代器的游标实现

2024-01-03

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())
  1. 在上面的示例中,hasNext() 返回 True。但根据我的理解,index[1] 中没有元素,因此它应该返回 false。但它返回 true。请帮助我理解这个逻辑。

  2. 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)  
  1. 你能解释一下什么是lastRet吗?它有与我的问题相关的地方吗?
  2. 游标始终指向索引[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(使用前将#替换为@)

Java集合中迭代器的游标实现 的相关文章

随机推荐