私は大きなを使って作業しているArrayList<HashMap<A,B>>
ので、ランダムなHashMapからランダムなキーを繰り返し選択する必要があります(そしてそれを使って何かをする必要があります)。ランダムなHashMapを選択するのは簡単ですが、このHashMap内からランダムなキーを選択するにはどうすればよいですか?
速度は重要です(これを10000回実行する必要があり、ハッシュマップが大きいため)。したがって、[0,9999]で乱数kを選択.next()
し、イテレーターをk回実行するだけでは、実際にはオプションではありません。同様に、ランダムピックごとにHashMapを配列またはArrayListに変換することは実際にはオプションではありません。返信する前にこれを読んでください。
技術的には、HashMapはキーをEntry[]
内部に格納し、配列からランダムに選択するのは簡単なので、これは可能であると思いますが、これにアクセスする方法がわかりませんEntry[]
。したがって、内部にアクセスするためのアイデアEntry[]
は大歓迎です。もちろん、他のソリューション(ハッシュマップサイズで線形時間を消費しない限り)も歓迎します。
注:ヒューリスティックは問題ないので、要素の1%を除外する方法がある場合(たとえば、複数のバケットがいっぱいになっているため)、まったく問題ありません。