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 возвращает.