TreeSet<Integer> s = new TreeSet<Integer>();        
 TreeSet<Integer> subs = new TreeSet<Integer>();     
 for(int i=606; i<613; i++)                          
     if(i%2 == 0) s.add(i);                          
 subs = (TreeSet)s.subSet(608, true, 611, true);     
 subs.add(629);        //这行导致的                              
 System.out.println(s + " " + subs);                 
为什么会抛如下异常:
Exception in thread "main" java.lang.IllegalArgumentException: key out of range

解决方案 »

  1.   

    sub.add(Integer)只能add 608到611的整数
    subSet方法的api描述,注意最后一行
    NavigableSet<E> subSet(E fromElement,
                           boolean fromInclusive,
                           E toElement,
                           boolean toInclusive)返回此 set 的部分视图,其元素范围从 fromElement 到 toElement。如果 fromElement 和 toElement 相等,则返回的 set 为空,除非 fromExclusive 和 toExclusive 都为 true。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回 set 支持此 set 支持的所有可选 set 操作。 
    如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException
      

  2.   

    OK,all right,I didn't see the last line in the api doc.