【问题标题】:go beyond Integer.MAX_VALUE constraints in Java超越 Java 中的 Integer.MAX_VALUE 约束
【发布时间】:2010-10-25 12:42:57
【问题描述】:

抛开堆的容量,有没有办法超越 Java 中的 Integer.MAX_VALUE 约束?

例如:

  1. 集合限制为 Integer.MAX_VALUE。
  2. StringBuilder / StringBuffer 将自身限制为 Integer.MAX_VALUE。

【问题讨论】:

  • 你在说哪些具体的限制条件?
  • 没有。集合中的元素数量、StringBuilder / StringBuffer 容量等。
  • 没有办法增加单个集合中的元素数量超出其索引 max_value (重写集合类除外)。在实践中,任何现实世界的内存限制肯定会在 max_value 之前超过...
  • 你知道 Integer.MAX_VALUE 是几十亿吗?为什么要创建一个超过十亿个字符的字符串?
  • 我不明白为什么您的集合中的元素会超过 MAX_VALUE 个...如果您遇到这种情况,您就有了受孕问题。

标签: java collections integer stringbuilder max


【解决方案1】:

用长?对我有用。

编辑: 啊,澄清问题。凉爽的。我的新的和改进的答案:

带有分页算法。

巧合的是,最近为了另一个问题 (Binary search in a sorted (memory-mapped ?) file in java),我提出了一个分页算法来绕过 java.nio.MappedByteBuffer API 中的 int 参数.

【讨论】:

    【解决方案2】:

    是的,使用 BigInteger 类。

    【讨论】:

      【解决方案3】:

      如果您有一个庞大的收藏集,那么在您拥有231 - 1 项目之前,您将遇到各种实际限制。一个包含一百万个项目的集合将非常笨重,更不用说一个超过数千倍的集合了。

      同样,StringBuilder 可以在达到MAX_VALUE 限制之前构建一个大小为 2GB 的字符串,这对于任何实际用途来说都绰绰有余。

      如果您真的认为您可能会达到这些限制,您的应用程序应该以不同的方式存储您的数据,可能在数据库中。

      【讨论】:

      • 虽然实用约束是正确的(如果你实际上有这么多元素,你可能想要数据库之类的东西),集合可以拥有超过 Integer.MAX_VALUE 元素。 size() 的文档明确指出:“返回此集合中的元素数。如果此集合包含多个 Integer.MAX_VALUE 元素,则返回 Integer.MAX_VALUE。”而且很容易在概念上拥有更多的元素。例如,如果您将抽象列表子类化。
      【解决方案4】:

      数组索引受 Integer.MAX_VALUE 限制,而不是数组的物理大小。

      因此,数组的最大大小与数组类型的大小相关。

      byte = 1 byte => max  2 Gb data
      char = 2 byte => max  4 Gb data
      int  = 4 byte => max  8 Gb data
      long = 8 byte => max 16 Gb data
      

      字典是另一回事,因为它们经常使用存储桶或内部数据布局等技术作为树。因此,这些“限制”通常不适用,否则您将需要更多数据才能达到限制。

      简短:Integer.MAX_VALUE 并不是真正的限制,因为您需要大量内存才能真正达到限制。如果您达到此限制,您可能需要考虑改进您的算法和/或数据布局:)

      【讨论】:

        【解决方案5】:

        需要升级内存.. :)

        【讨论】:

          【解决方案6】:

          您可以根据这些集合的源代码创建自己的具有长 size() 的集合。例如,要拥有更大的对象数组,您可以拥有一个数组数组(并将它们拼接在一起)

          这种方法将允许几乎 2^62 个元素。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-05-12
            • 1970-01-01
            • 1970-01-01
            • 2023-04-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多