ListIterator 迭代器中的返回索引的 previousIndex() 方法

Clown_悠哈 2012-05-26 09:07:43
import java.util.*;
class ListIteratorDemo01 {
public static void main(String[] args) {
List<String> li01 = new ArrayList<String>();
li01.add("abc01");
li01.add("abc02");
li01.add("abc03");
li01.add("abc04");

int index = indexOf(li01, "abc03");
print("index = " + index);

}
//返回将要检查的元素的索引
public static int indexOf(List<String> list, String str) {
for(ListIterator<String> it = list.listIterator(); it.hasNext();) {
if(str == null ? it.next() == null : str.equals(it.next())) {
return it.previousIndex(); //这点不明白
}
}
return -1; //没找到
}
public static void print(Object obj) {
System.out.println(obj);
}
}


int nextIndex()
返回对 next 的后续调用所返回元素的索引。
int previousIndex()
返回对 previous 的后续调用所返回元素的索引。
上面是 nextIndex() 和 previousIndex() 的定义

此题中返回的索引是正确的,但是我没搞明白

it 相当于那个游标,当 it 在索引 1、2 之间时it.next() 等于"abc03",
此时满足方法里的 if 条件 str.equals(it.next())
也就是说此处的 "abc03" 在索引 2 的位置上

此时 it 在索引 1、2 之间,如果用 it.nextIndex() 返回的是 3
但这里使用 it.previousIndex(), 返回的岂不是 "abc02" 对应的索(也就是 1 )吗???
所以我认为 it.previousIndex() 在此处是 1,不应该是 2。

高手帮解释一下:
...全文
339 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Clown_悠哈 2012-05-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
我认为其游标是2个: nextIndex() 和 previousIndex(), 开始迭代之前,it.nextIndex()=0,previousIndex()=-1. 根据对next() 和previous()的定义,执行一次it.netx(),游标都加一。 执行一次it.previous(),游标都减一。
这段程序向前遍历,(执行it.next()),执行一次: it.nextIndex(……
[/Quote]
集合里面只有一个游标
nmyangym 2012-05-26
  • 打赏
  • 举报
回复
我认为其游标是2个: nextIndex() 和 previousIndex(), 开始迭代之前,it.nextIndex()=0,previousIndex()=-1. 根据对next() 和previous()的定义,执行一次it.netx(),游标都加一。 执行一次it.previous(),游标都减一。
这段程序向前遍历,(执行it.next()),执行一次: it.nextIndex()=1,it.previous()=0;
执行第3次时,找到了"abc03"元素。此时it.nextIndex()=3,it.previousIndex()=2.(这个正指向那个"abc03".)

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧