Я не знаю никаких интерфейсов / библиотек, но вы можете попробовать использовать гистограмму, например структуру ...
Например, допустим, мы знаем, что наша структура будет содержать только целые числа от min
до max
включительно. Затем мы можем просто создать массив в следующем поместье ...
int[] hist = new int[max - min + 1];
Если мы хотим добавить число i
к гистограмме, мы можем просто сделать ...
hist[i - min]++;
Каждый индекс в массиве представляет собой число в предопределенном диапазоне. Каждое значение в массиве представляет собой количество вхождений числа в диапазоне.
Эта структура чрезвычайно эффективна, поскольку позволяет выполнять постоянное добавление, удаление и поиск.
Допустим, мы хотите удалить все элементы в включающем диапазоне Q = [s, e]
. Мы можем запустить следующую линейную l oop ...
for (int i = s; i <= e; i++) {
hist[i - min] = 0;
}
Это выполняется в O(|Q|)
.
Наконец, если мы хотим сделать указанную выше структуру упорядоченным набором вместо упорядоченной последовательности, мы могли бы изменить наш массив так, чтобы он содержал логические значения вместо целых чисел.
Для получения дополнительной информации проверьте https://en.wikipedia.org/wiki/Counting_sort.