gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:01:53 24 4
gpt4 key购买 nike

全部,

只是编程的初学者。我正在探索 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”。但根据我的理解,它需要返回 Array List 中的下一个元素,因为它已经指向索引 [0]。

另外,我在 Debug模式下查看了iterator obj,

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],这意味着数组列表中的第一个元素。请澄清我的理解。

问候,半机械人

最佳答案

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;

关于java - Java 集合中迭代器中的游标实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26194702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com