java - 将 int 映射到 int(在 Java 中)

标签 java algorithm dictionary integer mapping

在 Java 中。

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

第一组数字可以是任意值,第二组数字表示数组的索引,所以目标是能够通过第一组数字访问第二组数字。这是一对一的关联。

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

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

最佳答案

有一篇文章专门针对这个问题(以及解决方案):Implementing a world fastest Java int-to-int hash map

相关代码可以在GitHub repository中找到. (最佳结果在类 IntIntMap4a.java 中)

文章引用:


总结

如果您想优化 HashMap 以提高速度,您必须尽可能多地执行以下列表:

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

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

关于java - 将 int 映射到 int(在 Java 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30788774/

相关文章:

Java for 循环的幂

algorithm - 为什么确定一个函数是否是纯函数很困难?

python - 每个深度的二叉树遍历总和

python - 存储 Python 字典

java - Android - runOnUIThread 什么时候发生?

java - 如何在我的 Android 应用程序中截取屏幕截图

java - 内存泄漏 Spring Boot

algorithm - 需要一个算法来解决这个问题

c++ - 如何获取存储在 C++ 列表中的类对象?

python - 三层嵌套字典的存在性检验