Структура данных Java, которая имеет эффективное добавление, удаление и случайное
Мне нужна структура данных Java, которую я могу эффективно добавлять, удалять и получать доступ к случайному объекту.
Это то, что не работает:
ArrayList имеет эффективное добавление (постоянное время) и произвольный доступ (просто «получить» со случайным целым числом), но удаление может занимать линейное время, потому что оно потенциально может искать его по всему списку.
TreeSet или HashSet имеют эффективные добавления и удаления, но я не могу понять, как получить случайный объект.
Есть идеи?
Теоретически, B-дерево сработало бы, если бы я сам мог обходить дерево случайными левами или правами, но я не думаю, что стандартный класс Java дает мне такую возможность.
Я готов использовать стороннюю библиотеку, если ничего из стандартных классов Java не будет работать.
Мне не нужно поддерживать дубликаты или нули, и при этом не нужно быть потокобезопасным.
Благодарю.