So wählen Sie einen zufälligen Schlüssel aus einer HashMap in Java?

Arbeite ich mit einem großen ArrayList<HashMap<A,B>>, und ich würde immer wieder brauchen, wählen Sie einen zufälligen Schlüssel aus einer zufälligen HashMap (und einige Sachen mit ihm). Die Auswahl der zufälligen HashMap ist trivial, aber wie soll ich wählen Sie eine zufällige Taste in dieser HashMap?

Geschwindigkeit wichtig ist (als ich dies tun müssen 10000 mal und die hashmaps sind groß), so dass nur wählen eine zufällige Zahl k in [0,9999] und dann tut .next() auf der iterator k-mal, das ist nicht wirklich eine option. Ähnlich, die Umwandlung der HashMap in ein array oder ArrayList auf jede zufällige Holen, das ist nicht wirklich eine option. Bitte, Lesen Sie diese, bevor Sie Antworten.

Technisch fühle ich, dass dies möglich sein sollte, da die HashMap speichert seine Schlüssel in einer Entry[] intern, und die Auswahl nach dem Zufallsprinzip aus einem array einfach ist, aber ich kann nicht herausfinden, wie Zugriff auf diese Entry[]. Also, irgendwelche Ideen auf das interne Entry[] sind mehr als willkommen. Andere Lösungen (solange Sie nicht verbrauchen die lineare Zeit in der hashmap-Größe) sind auch willkommen natürlich.

Hinweis: Heuristiken sind in Ordnung, wenn es also eine Methode, schließt die 1% der Elemente (z.B. wegen multi-gefüllte Eimer) das ist überhaupt kein problem.

  • Einträge angekettet werden, wenn Sie mehr als eine zur gleichen index. So, dass wäre nicht so einfach.
  • Wenn die Umwandlung den entrySet zu einer Liste ist'f schnell genug ist (hast du das Profil ?), dann müssen Sie eine weitere Datenstruktur.
  • Pseudo ist in Ordnung, wenn es 1% der Einträge, die nie abgeholt werden, ist dies keine große Sache. Nicht, dass geben zusätzliche Optionen? Also, keine sorgen, wenn ein element verkettet ist, dann wählen Sie einfach ein anderes element.
InformationsquelleAutor user1111929 | 2012-09-12
Schreibe einen Kommentar