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。高手帮解释一下:

解决方案 »

  1.   

    我认为其游标是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".)