我已经删除了代码以重现抛出错误的示例:
public class Test {
public static void main(String[] args) {
NavigableSet<String> set = new TreeSet<String>(
Arrays.asList("a", "b", "c", "d"));
NavigableSet<String> set2 = new TreeSet<String>();
set2 = set.tailSet("c", false);
set2.addAll(set.headSet("b", true));
System.out.println(set2);
}
}
代码的目的是在检索集合的子集时实现某种翻转。例如。在上面的例子中,我想要c [独家]到b [包含]的所有元素。我注意到如果我注释掉tailSet()或headSet()行,其余的代码效果很好。但是,当我有这两行时,我得到了
java.lang.IllegalArgumentException:键超出范围
答案 0 :(得分:7)
尝试这样的事情:
public static void main(String[] args) {
NavigableSet<String> set = new TreeSet<String>(
Arrays.asList("a", "b", "c", "d"));
NavigableSet<String> set2 = new TreeSet<String>();
set2.addAll(set.tailSet("c", false));
set2.addAll(set.headSet("b", true));
System.out.println(set2);
}
当你这样做时
set2 = set.tailSet("c", false);
您实际上丢失了对您创建的新TreeSet
的引用,并获得了SortedSet
返回的set.tailSet
。