我应该将字符串键重新映射为整数以将属性存储在集合中吗? Java
Should I remap string keys into integers for stoing attributes in a collecion? Java
我有一个非常可修改的系统,我在其中将属性存储在 HashMap 中。键是一个字符串,值是 Value classes.
的层次结构
代码在我的项目中访问地图的频率非常高,以至于哈希图访问和字符串处理成为分析器中的主要成本。
我想知道如果我将字符串映射到整数并将容器从散列映射切换到数组,是否可以提高性能。字符串键不是临时的,它们是有限的,我会知道在初始化时使用的所有字符串,由 class 用户传递给我。
我将有以下 coding/usage 开销:
- 开始时注册密钥。
- 如果我希望保持相同的 class 界面,则在运行时针对每个请求将字符串转换为索引。
- 同时管理这些中间映射的序列化。
如果我也切换 class 界面(非常痛苦,但可以做到),我可以在处理阶段完全摆脱字符串,只在数据设置配置中使用它们。
但是会有实质性的好处还是我只是在浪费时间?
您描述的将字符串映射到整数然后使用整数作为数组索引的过程实际上是原始 HashMap 实现的基础!在内部 Java 的 HashMap class 正在做类似的事情,但更高级一些。
我不建议走这条路。许多库试图击败 Java 的 HashMap class 的性能,但 none 已经能够做得更好。查看基准 here.
如果您需要提高性能并且大部分时间花在HashMap 上,请考虑将您的数据分成多个HashMap 并跨多个线程处理您的数据。这应该会给您带来实质性的性能改进,但您需要提供有关您的用例的更多详细信息,以便查看这是否真的适合您的情况。
我有一个非常可修改的系统,我在其中将属性存储在 HashMap 中。键是一个字符串,值是 Value classes.
的层次结构代码在我的项目中访问地图的频率非常高,以至于哈希图访问和字符串处理成为分析器中的主要成本。
我想知道如果我将字符串映射到整数并将容器从散列映射切换到数组,是否可以提高性能。字符串键不是临时的,它们是有限的,我会知道在初始化时使用的所有字符串,由 class 用户传递给我。
我将有以下 coding/usage 开销:
- 开始时注册密钥。
- 如果我希望保持相同的 class 界面,则在运行时针对每个请求将字符串转换为索引。
- 同时管理这些中间映射的序列化。
如果我也切换 class 界面(非常痛苦,但可以做到),我可以在处理阶段完全摆脱字符串,只在数据设置配置中使用它们。
但是会有实质性的好处还是我只是在浪费时间?
您描述的将字符串映射到整数然后使用整数作为数组索引的过程实际上是原始 HashMap 实现的基础!在内部 Java 的 HashMap class 正在做类似的事情,但更高级一些。
我不建议走这条路。许多库试图击败 Java 的 HashMap class 的性能,但 none 已经能够做得更好。查看基准 here.
如果您需要提高性能并且大部分时间花在HashMap 上,请考虑将您的数据分成多个HashMap 并跨多个线程处理您的数据。这应该会给您带来实质性的性能改进,但您需要提供有关您的用例的更多详细信息,以便查看这是否真的适合您的情况。