java treeset бросает illegalArgumentException: ключ вне диапазона
Я разделил код, чтобы воспроизвести пример, который выдает ошибку:
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 [exclusive] до b [inclusive]. Я заметил, что если я комментирую строки tailSet() или headSet (), остальная часть кода работает хорошо. Однако, когда у меня есть обе строки, я получаю
java.ленг.IllegalArgumentException: ключ вне досягаемости
1 ответов
попробуйте что-то вроде этого:
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
возвращает.