Высшие и низшие элементы в трове TIntSet?
TIntSet
это "отсортированный набор" по смыслу, т.е. его элементы имеют естественный порядок.
К сожалению, я не могу найти какие-либо методы, похожие на first()
а также last()
,
Можно ли как-то преодолеть этот недостаток?
4 ответа
fastutil во всех отношениях лучше, чем Trove. Есть IntSortedSet
интерфейс с firstInt()
а также lastInt()
методы.
TIntSet не отсортирован (это хэш-набор), поэтому для нахождения минимума или максимума вам нужно будет выполнить итерацию всех значений.
Как вы думаете, почему этот набор отсортирован? Похоже, это не так. Он не реализует интерфейсы SortedSet или NavigableSet из инфраструктуры коллекций JDK - там нет таких методов.
методы first() и last() фактически наследуются от интерфейса SortedSet https://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html
Если вам нужен параметр типа первый / последний / ячейка / пол и т. Д., То необходим набор на основе дерева, и ничего такого нет. Если вы хотите расширить TIntSet, чтобы иметь такую вещь, то
Одним из простых вариантов может быть поддержание отсортированных значений в параллельном массиве int и использование его для обслуживания первого / последнего типа запроса, но для этого потребуется дополнительная память.
Другой вариант заключается в том, что вы можете использовать только один массив для значений, но keep сортируется и использовать бинарный поиск для поддержки API карты. Это может быть немного медленным для get/put по сравнению с trove, но вы можете сэкономить память, потому что trove имеет.5 loadfactor
Таким образом, вы можете принять решение на основе компромисса, который вы хотите.