gpt4 book ai didi

java - HashMap的性能

转载 作者:行者123 更新时间:2023-12-01 06:15:34 25 4
gpt4 key购买 nike

我必须处理 450 个唯一字符串大约 5 亿次。每个字符串都有唯一的整数标识符。有两个选项供我使用。

  1. 我可以将标识符附加到字符串中,并在到达时string 我可以拆分字符串来获取标识符并使​​用它。
  2. 我可以将 450 个字符串存储在 HashMap<String, Integer> 中等等字符串到达​​,我可以查询HashMap获取标识符。

有人可以建议哪种选项在处理方面更有效吗?

最佳答案

这一切都取决于字符串的大小等。

你可以做各种各样的事情。

您可以使用二分搜索来获取列表中的索引,该索引处就是标识符。

您可以仅对前 2 个字符进行散列,而不是对整个字符串进行散列,这可能比二分搜索更快,假设字符串具有良好的分布。

如果第一个字符或前两个字符在指向标识符的 255 或 65K 大型数组中作为“完美索引”是唯一的,则可以使用它们。

此外,如果您的标识符是数字,最好预先计算它,而不是一直动态转换它。文本 -> 二进制实际上相当昂贵(二进制 -> 文本更糟糕)。因此,如果可能的话,最好避免这种情况。

但你应该解决这个问题。 100 万个任何东西,每个 1 毫秒,就是 20 分钟的处理时间。在 500m 处,每浪费一纳秒,就会增加 8 分钟以上的处理时间。您可能不在乎,但只是证明在这些规模上“每一点都有帮助”。

所以,不要相信我们的话,测试不同的东西来找到最适合你的工作集的结果,然后就这样做。还要考虑过多的对象创建,并避免这种情况。通常情况下,我不会再考虑这个问题。对象创建速度很快,但纳秒就是纳秒。

如果您使用 Java,并且您并不真正需要 Unicode(即您正在使用 0-255 范围内的单个字符),那么我根本不会使用字符串。我会使用原始字节。字符串基于 Java 字符,即 UTF-16。 Java Readers 将 UTF-8 转换为 UTF-16。单例的。时间。 5亿次。是的!又是几纳秒。 8 纳秒会使您的处理时间增加一个小时。

所以,再一次,看看所有的角落。

或者,不要,简单地编写它,启动它,在周末运行它,然后完成它。

关于java - HashMap的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25696524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com