Как выбрать случайный ключ из 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% элементов (например, из-за заполненных множеством ведер), то это вообще не проблема.