代码之家  ›  专栏  ›  技术社区  ›  setzamora

超越Java中的Integer.MAX_值约束

  •  4
  • setzamora  · 技术社区  · 15 年前

    抛开堆的容量不谈,Java中有没有超越Integer.MAX_值约束的方法?

    例如:

    1. 集合将自身限制为Integer.MAX_值。
    2. StringBuilder/StringBuffer将其自身限制为Integer.MAX_值。
    6 回复  |  直到 15 年前
        1
  •  9
  •   David Webb    15 年前

    如果你有一个庞大的收藏,你会在你有之前达到各种各样的实用极限 2 31 - 1

    类似地,StringBuilder可以在到达目标之前构建2GB大小的字符串 MAX_VALUE

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

        2
  •  3
  •   Community CDub    7 年前

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

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

        3
  •  3
  •   Peter Lawrey    15 年前

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

        4
  •  2
  •   Philipp    15 年前

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

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

    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_值不是一个真正的限制,因为实际达到该限制需要大量内存。如果达到这个极限,您可能需要考虑改进算法和/或数据布局:)

        5
  •  1
  •   Joonas Pulakka    15 年前

    是的,使用BigInteger类。

        6
  •  1
  •   Sajal Dutta    15 年前

    内存升级是必需的:)