ArrayList<HashMap<A,B>>
,我需要从随机 HashMap 中选择一个随机键(并对其进行一些处理)。选择随机 HashMap 很容易,但如何在这个 HashMap 内部选择一个随机键呢?速度很重要(因为我需要执行此操作 10000 次且哈希表很大),所以仅仅在 [0,9999] 中选取一个随机数 k ,然后在迭代器上执行 k 次 .next(),真的不可行。同样,每次随机选择时将 HashMap 转换为数组或 ArrayList 也不可行。请在回复之前仔细阅读此内容。
从技术上讲,我认为这应该是可能的,因为 HashMap 在内部将其键存储在 Entry[] 中,并且从数组中随机选择很容易,但我无法弄清楚如何访问此 Entry[]。因此,欢迎任何访问内部 Entry[] 的想法。当然,其他解决方案(只要不消耗哈希表大小的线性时间)也是受欢迎的。
注意:启发式方法是可以的,因此,如果有一种方法可以排除 1% 的元素(例如,由于多填充桶),那就没有问题。