HashMap:以随机顺序迭代键值对

2023-11-24

我有一个 HashMap,每次获得迭代器时,我想以不同的随机顺序迭代它们的键值对。从概念上讲,我想在调用迭代器之前“洗牌”地图(或者如果您愿意,“洗牌”迭代器)。

我看到有两个选择:

1)使用 LinkedHashMap 的方法并在内部保留条目列表,将其就地打乱并在调用迭代器时返回该视图。
2)采用map.entrySet(),构造一个ArrayList并对其使用shuffle()。

虽然这两种方法对我来说看起来非常相似,但我期待非常大的 HashMap,所以我真的很关心细节和内部结构,因为我真的不能浪费内存或计算。


重新洗牌一个大的收藏总是会很昂贵。每个条目至少需要一份参考资料。例如对于 100 万个条目,您将需要大约 4 MB。

笔记;洗牌操作是O(N)

我会用

Map<K,V> map = 
List<Map.Entry<K,V>> list = new ArrayList<Map.Entry<K,V>>(map.entrySet());

// each time you want a different order.
Collections.shuffle(list);
for(Map.Entry<K, V> entry: list) { /* ... */ }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HashMap:以随机顺序迭代键值对 的相关文章

随机推荐

  • 如何使用 RX 限制事件流?

    我想有效地限制事件流 以便在收到第一个事件时调用我的委托 但如果收到后续事件则不会调用 1 秒 超时 1 秒 到期后 如果收到后续事件 我希望调用我的委托 有没有一种简单的方法可以使用反应式扩展来做到这一点 示例代码 static void
  • 给定起始位置和结束位置列表构造 Numpy 索引

    我有两个大小相同的 numpy array 对象 都是一维 其中一个包含起始索引位置列表 另一个包含结束索引位置列表 或者你可以说我有一个列表起始位置和窗口长度 如果重要的话 由起始位置和结束位置形成的切片保证不重叠 我试图弄清楚如何使用这
  • 防止 Maven 子 pom 中覆盖依赖版本

    我在父 pom 中有一个 dependencyManagement 部分 例如
  • R 绘制独立的函数图例

    我想通过 R 绘制具有独立图例的图 同时尊重色阶 这就是我所拥有的 library plotly X lt data frame xcoord 1 6 ycoord 1 6 score 1 6 gender c M M M F F F ag
  • 将事件路由到 eventhub EventProcessor

    我有不同类型的活动 例如 有些数据是遥测数据 有些是错误信息等 我认为创建多个 IEventProcessor 实现是一个好主意 每个实现对应一种事件类型 因此每个实现都会以不同的方式处理事件 就像写入文件或数据库一样 将事件路由到特定 E
  • 如何使用日期时间索引在 pandas 中进行插值重新索引?

    我有一个带有日期时间索引的系列 我想要的是使用其他一些任意日期时间索引来插入这些数据 本质上我想要的是如何使以下代码片段或多或少工作 from pandas import Series import datetime datetime in
  • tcpdf:图像质量差

    我正在使用 TCPDF 创建使用其 writeHTML 函数从 HTML 输入转换而来的 PDF 文件 但是 PDF 中的图像质量较差 而原始图像质量较高 如预期 图像为 PNG 格式 我已经尝试使用 SetJPEGQuality 100
  • 如何限制 Firebase 中产品的注册

    如果我创建一个新产品 使用简单的身份验证 有一个 创建用户 API 如何限制它 以便只有受邀请的电子邮件 通过电子邮件或通过一次性密钥 才能注册 似乎不太符合规则 但我可能遗漏了一些东西 首先 我应该指出 核心 Firebase API 使
  • 如何在Zend框架的不同模块中使用相同的模型?

    我正在致力于在现有项目中实现 Zend Framework 该项目具有公共营销区域 私人会员区域 管理站点和营销活动管理站点 目前 这些内容的组织很差 营销区域和会员区域的控制器脚本都位于网站的根目录下 然后是一个单独的管理文件夹和另一个用
  • F# Async.Parallel 是否可以加快计算速度?

    Async Parallel 结构真的有助于提高多核系统上的计算速度吗 这里是否以某种方式涉及 NET TPL 任务 open System let key Console ReadKey true let start System Dat
  • 网络共享上的 .NET 4.0 应用程序导致 SecurityException

    今天 我在尝试远程调试为 NET 4 0 运行时构建的应用程序时遇到了一个奇怪的问题 该应用程序驻留在网络共享上并由远程计算机执行 但是 由于 System Configuration ConfigurationManager GetSec
  • 一个衬垫可以重命名一堆文件

    我一直在寻找一个 Linux 命令行单行程序来一次重命名一堆文件 pattern1 a pattern1 b pattern1 c 命令执行后我应该得到 pattern2 a pattern2 b pattern2 c for i in p
  • ggplot特定粗线

    如何才能绘制出一条线比另一条线粗的线呢 我尝试使用geom line size X 但这会增加两条线的粗细 假设我想增加第一列的厚度 如何实现这一点 a lt cbind rnorm 100 rnorm 100 nav 1 10 sa lt
  • “python setup.py install”和“pip install”之间的区别

    我有一个外部包想要从 tar 文件安装到我的 python virtualenv 中 安装软件包的最佳方法是什么 我发现了两种方法可以做到这一点 解压 tar 文件 然后运行python setup py install在提取的目录内部 p
  • 无法创建新文件:设备尚未准备好

    我正在使用 Java 创建一个新文件 但出现异常 Exception in thread main java io IOException The device is not ready at java io WinNTFileSystem
  • 如何通过 Google Places Autocomplete API 以多种语言执行搜索来获取城市的唯一标识符​​?

    当在另一种语言 API 中再次查找同一城市以找到同一城市的这个地方时 我需要获取城市名称的唯一标识符 Example 我通过 Google API 自动完成位置进行搜索 如下所示 城市 纽约 结果是 纽约 NY 美国 国家代码 U S 例如
  • 通过 Javascript / jQuery 检测 Android 手机

    我如何检测正在使用的设备是移动网站的 Android 设备 我需要将某些CSS属性应用到Android平台 Thanks 看看那个 http davidwalsh name detect android JavaScript var ua
  • vscode 智能感知不工作

    我刚刚下载了适用于 linux ubuntu 14 04 的 Visual Studio 代码 我创建了一个简单的 test cpp 并在 vscode 中编写它 但智能感知不起作用 这是test cpp中的代码 struct test i
  • Redshift COPY 操作在 SQLAlchemy 中不起作用

    我正在尝试在 SQLAlchemy 中进行 Redshift COPY 当我在 psql 中执行以下 SQL 时 它可以正确地将对象从我的 S3 存储桶复制到我的 Redshift 表中 COPY posts FROM s3 mybucke
  • HashMap:以随机顺序迭代键值对

    我有一个 HashMap 每次获得迭代器时 我想以不同的随机顺序迭代它们的键值对 从概念上讲 我想在调用迭代器之前 洗牌 地图 或者如果您愿意 洗牌 迭代器 我看到有两个选择 1 使用 LinkedHashMap 的方法并在内部保留条目列表