日期:2014-05-20  浏览次数:20613 次

关于迭代器的一个问题
本人现在在看THINKING IN JAVA 第三版 ,看到下面的代码时遇到一个问题,代码如下
Java code

import java.util.*;

public class SortedSetDemo {
  //private static Test monitor = new Test();
  public static void main(String[] args) {
    SortedSet sortedSet = new TreeSet(Arrays.asList(
    "one two three four five six seven eight".split(" ")));
    System.out.println(sortedSet);
    Object
      low = sortedSet.first(),
      high = sortedSet.last();
    System.out.println(low);
    System.out.println(high);
    Iterator it = sortedSet.iterator();
    for(int i = 0; i <= 6; i++) {
       [b]  if(i == 3) low = it.next();
            if(i == 6) high = it.next();
         [/b] 
      
      
      else it.next();
    }
    System.out.println(low);
    System.out.println(high);
    System.out.println(sortedSet.subSet(low, high));
    System.out.println(sortedSet.headSet(high));
    System.out.println(sortedSet.tailSet(low));
    /*monitor.expect(new String[] {
      "[eight, five, four, one, seven, six, three, two]",
      "eight",
      "two",
      "one",
      "two",
      "[one, seven, six, three]",
      "[eight, five, four, one, seven, six, three]",
      "[one, seven, six, three, two]"
    });*/
  }
} ///:~


疑问主要这两句代码的输出if(i == 3) low = it.next();
  if(i == 6) high = it.next();
,为什么输出结果是 one,two ,如果把这两行代码换一下顺序,结果又不同,是one,three,这是为什么,请分析一下

------解决方案--------------------
else匹配问题:if(i==6)在上面时,和if(i==3)匹配,故it.next执行一次
if(i==3)在上面时,和if(i==6)匹配,故it.next执行两次