java编程思想中关于迭代器的一段
SortedSet sortedSet=new TreeSet(Arrays.asList("one two three four five six seven eight".split(" ")));
Iterator it=sortedSet.iterator();
for(int i=0;i<=6;i++){
if(i==3) low=it.next();
if(i==6) high=it.next();
else it.next();
}
System.out.println(sortedSet);
System.out.println(low);
System.out.println(high)
运行结果为:
[eight,five,four,one,seven,six,three,two]
one
two
我的问题是low和high的值怎么得到的,为什么他们之间相差三个对象?
有哪位大哥能帮我解释一下,小弟感激不尽

解决方案 »

  1.   

    if(i==3) low=it.next();
    if(i==6) high=it.next();所以 low 和 high差3个下标
      

  2.   

    迭代实际上是就是使用游标(类似数组下标)方式遍历集合的数据
    因为你使用SortSet,所以会根据拟的数据内容进行排序
    sortedSet 的内容是:eight,five,four,one,seven,six,three,two
    next()就是返回当前游标值得数据,同时对游标加一,迭代器在创建时游标为0
    所以i是3时,游标为4,数据为one, i是6时,游标为7,数据为two
      

  3.   

    i为6时,游标值的数据应该是three呀,然后游标值加一变成7,也就是high的值为three,不是这样吗?
      

  4.   

    对了 我看的时候也觉得这个地方好像错了
    i是6时,游标为7,数据为two????是为two吗? 我怎么觉得是three
    除非有别的高深解释
    下标差3 而实际内容是差4  分明不对应
      

  5.   

    因为当i==3是,多运行了一遍
    if(i==6) high=it.next();
    else it.next(); // 这里下面的就是three
    SortedSet sortedSet=new TreeSet(Arrays.asList("one two three four five six seven eight".split(" ")));
    Iterator it=sortedSet.iterator();
    for(int i=0;i<=6;i++){
    if(i==3) low=it.next();
    else if(i==6) high=it.next();
    else it.next();
    }
    System.out.println(sortedSet);
    System.out.println(low);
    System.out.println(high)