Jak wybrać losowy klucz z HashMap w Javie?

Pracuję z dużąArrayList<HashMap<A,B>>i musiałbym wielokrotnie wybierać losowy klucz z losowej HashMap (i robić z nim kilka rzeczy). Wybór losowego HashMap jest trywialny, ale jak powinienem wybrać losowy klucz z tej mapy HashMap?

Szybkość jest ważna (ponieważ muszę to zrobić 10000 razy, a hashapy są duże), więc wystarczy wybrać losową liczbę k w [0,9999], a następnie wykonać.next() w czasach iteratora k, naprawdę nie jest to opcja.Podobnie, konwersja HashMap na tablicę lub ArrayList na każdym losowym wybieraniu nie jest opcją. Przeczytaj to przed odpowiedzią.

Technicznie uważam, że powinno to być możliwe, ponieważ HashMap przechowuje swoje klucze wEntry[] wewnętrznie, a wybieranie losowo z tablicy jest łatwe, ale nie wiem, jak uzyskać do niej dostępEntry[]. Więc wszelkie pomysły, aby uzyskać dostęp do wewnętrznegoEntry[] są mile widziane. Inne rozwiązania (o ile nie zużywają czasu liniowego w rozmiarze hashap) są oczywiście mile widziane.

Uwaga: heurystyka jest w porządku, więc jeśli istnieje metoda wykluczająca 1% elementów (np. z powodu wypełnionych wiader), nie stanowi to żadnego problemu.

questionAnswers(9)

yourAnswerToTheQuestion