Как выбрать случайный ключ из HashMap в Java?

Я работаю с большимArrayList<HashMap<A,B>>, и мне неоднократно нужно было бы выбирать случайный ключ из случайного HashMap (и делать с ним некоторые вещи). Выбор случайного HashMap тривиален, но как выбрать случайный ключ из этого HashMap?

Скорость важна (так как мне нужно сделать это 10000 раз, а хэш-карты большие), поэтому просто выберите случайное число k в [0,9999] и затем выполните.next() на итераторе k раз, это действительно не вариант.Similarly, converting the HashMap to an array or ArrayList on every random pick is really not an option. Пожалуйста, прочитайте это, прежде чем ответить.

Технически я считаю, что это должно быть возможно, поскольку HashMap хранит свои ключи вEntry[] внутренне, и случайный выбор из массива прост, но я не могу понять, как получить к нему доступEntry[], Так что любые идеи для доступа к внутреннемуEntry[] более чем приветствуются. Конечно, приветствуются также и другие решения (если они не используют линейное время в размере хэш-карты).

Note: Эвристика хороша, поэтому, если существует способ, который исключает 1% элементов (например, из-за заполненных множеством ведер), то это вообще не проблема.

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

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