将 int 映射到 int (在 Java 中)

Pap*_*sar 3 java mapping algorithm dictionary integer

在爪哇。

如何将一组数字(例如整数)映射到另一组数字?所有数字都是正数,并且所有数字在自己的集合中都是唯一的。

第一组数字可以具有任何值,第二组数字表示数组的索引,因此目标是能够通过第一组中的数字访问第二组中的数字。这是一对一的关联。

速度至关重要,因为每秒必须调用该方法多次。

编辑:我尝试使用 SE hashmap 实现,但发现它对于我的目的来说很慢。

Nic*_*kin 5

有一篇文章专门讨论这个问题(带有解决方案):Implementing a world fast Java int-to-int hash map

代码可以在相关的GitHub存储库中找到。(最佳结果在类 IntIntMap4a.java 中)

文章引用:


概括

如果您想优化哈希映射的速度,您必须尽可能执行以下列表中的操作:

  • 使用容量等于 2 的幂的底层数组 - 它将允许您使用便宜的 & 而不是昂贵的 % 作为数组索引
  • 不要将状态存储在单独的数组中 - 使用专用字段来释放/删除的键和值。
  • 在一个数组中交错键和值 - 它将允许您免费将值加载到内存中。
  • 实施一项策略来摆脱“已删除”的单元格 - 您可以牺牲一些删除性能以支持更频繁的获取/放置。
  • 在计算初始单元索引时对密钥进行加扰 - 这是处理连续密钥的情况所必需的。

    是的,我知道如何使用引文格式。但它看起来很糟糕并且不能很好地处理项目符号列表。