【问题标题】:Alternative for Java String array for performanceJava String 数组的替代方案以提高性能
【发布时间】:2021-04-19 15:26:27
【问题描述】:

我正在使用一些 4 维和 3 维 Java 字符串数组。使用字符串数组的原因是我有多种数据类型。尽管大约 85% 的数组是 NULL,但 10% 是转换为 String 以存储在 String 数组中的 Integer,而 5% 是实际的 String。我必须非常频繁地访问这些数组以首先存储信息,然后再次访问它们进行处理。

现在在我看来,这会导致运行时间大幅增加,因为我必须处理非常大的文件,即几 GB 大小的文件。在这种情况下,还有哪些其他数据结构可以用来改善运行时间和内存?

【问题讨论】:

  • “使用字符串数组的原因是我有多种数据类型”听起来像是不使用 String[] 的原因。
  • 如果数组的 85% 为空,您可能需要考虑使用某种稀疏数组。
  • 哪种数据结构应该用于混合数据类型? @AndyTurner
  • @MDAbidHasan 您应该使用 Object 数组并在运行时检查实例,这在空间上更有效,并且可能比将字符串解析回整数更省时。关于稀疏数组,它取决于您对数组进行的访问次数和类型。如果您需要完全随机访问,那么稀疏实现可能不适合您。
  • 很可能,对您的数据一无所知......实际上任何事情......最里面的数组可能应该被具有命名和类型字段的对象替换。例如。 String[][] x = { { "John", "Doe", null, "42" }, ... } 应该是 Person[] x = { new Person("John", "Doe", null, 42), ... },所以每个值都可以静态类型化。

标签: java arrays string


【解决方案1】:

使用字符串数组的原因是我有多种数据类型

听起来像是不使用String[] 的理由。

考虑一下,如果您将 int 存储为 String,那么您正在存储:

  • 多个chars
  • char的数组长度
  • hashCode 之类的字段

而如果您将int 存储在Integer 中,您就是在存储:

  • int

还有其他一些开销,但int 占用了 2 个chars 的空间。所以String 是存储大部分非空数据的一种非常低效的方式。

如果必须的话,将东西存储在Object 数组中,它可以同时保存StringInteger 实例,然后在使用之前检查元素的类型。

如果 85% 的数组确实为空,则应考虑使用某种稀疏数组。

【讨论】:

  • 感谢您的回答。在这种情况下,你能给(或指出我)一个稀疏数组的例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
相关资源
最近更新 更多