Структура данных Java, которая имеет эффективное добавление, удаление и случайное

Мне нужна структура данных Java, которую я могу эффективно добавлять, удалять и получать доступ к случайному объекту.

Это то, что не работает:

ArrayList имеет эффективное добавление (постоянное время) и произвольный доступ (просто «получить» со случайным целым числом), но удаление может занимать линейное время, потому что оно потенциально может искать его по всему списку.

TreeSet или HashSet имеют эффективные добавления и удаления, но я не могу понять, как получить случайный объект.

Есть идеи?

Теоретически, B-дерево сработало бы, если бы я сам мог обходить дерево случайными левами или правами, но я не думаю, что стандартный класс Java дает мне такую ​​возможность.

Я готов использовать стороннюю библиотеку, если ничего из стандартных классов Java не будет работать.

Мне не нужно поддерживать дубликаты или нули, и при этом не нужно быть потокобезопасным.

Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос