Ключ вне диапазона при добавлении элемента в заголовок отсортированного набора в Java - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь получить заголовок отсортированного набора, назначить его той же переменной, а затем добавить к нему некоторые значения, но я получаю java.lang.IllegalArgumentException: key out of range.

Мой код ниже

import java.util.SortedSet;
import java.util.TreeSet;

class StackOverflow{
    public static void main(String args[]){
        SortedSet<Integer> some_set = new TreeSet<Integer>();
        some_set.add(5);
        some_set.add(3);
        some_set.add(12);
        some_set.add(15);

        some_set = some_set.headSet(10);
        some_set.add(10);

        System.out.println(some_set);
    }
}

Я читал, что есть что-то вроде ограниченного диапазона, который устанавливается с помощью headSet, но я не нашел способа предотвратить это. Есть ли способ иметь неограниченную верхнюю границу при использовании headSet или, может быть, установить ее после назначения? Единственное решение, которое я придумал, это

import java.util.SortedSet;
import java.util.TreeSet;

class StackOverflow{
    public static void main(String args[]){
        SortedSet<Integer> some_set = new TreeSet<Integer>();
        some_set.add(5);
        some_set.add(3);
        some_set.add(12);
        some_set.add(15);

        SortedSet<Integer> temp_some_set = new TreeSet<Integer>(some_set.headSet(10));
        some_set = temp_some_set;
        some_set.add(10);

        System.out.println(temp_some_set);
    }
}

Но это создает нежелательный новый отсортированный набор с элементами из заголовка предыдущего набора, который замедляет программу, когда мне приходится выполнять такую ​​операцию огромное количество раз.

1 Ответ

0 голосов
/ 10 марта 2019

Я считаю, что вы используете headSet не правильно.

Он должен использоваться для получения подмножества значений из основного набора. Документы - здесь

Я полагаю, вы должны использовать last() метод для вашего варианта использования.

...