我正在使用一个大ArrayList<HashMap<A,B>>
的 ,我会反复需要从随机 HashMap 中选择一个随机键(并用它做一些事情)。选择随机 HashMap 很简单,但是我应该如何从这个 HashMap 中选择一个随机键呢?
速度很重要(因为我需要这样做 10000 次并且哈希图很大),所以只是在 [0,9999] 中选择一个随机数 k,然后.next()
在迭代器上执行 k 次,这真的不是一个选择。同样,在每次随机选择时将 HashMap 转换为数组或 ArrayList 确实不是一种选择。请在回复之前阅读此内容。
从技术上讲,我觉得这应该是可能的,因为 HashMap 将其键存储在Entry[]
内部,并且从数组中随机选择很容易,但我不知道如何访问它Entry[]
。因此,任何访问内部的想法Entry[]
都非常受欢迎。当然也欢迎其他解决方案(只要它们不消耗散列图大小的线性时间)。
注意:启发式方法很好,所以如果有一种方法可以排除 1% 的元素(例如,由于多个填充的桶),那根本没有问题。