【问题标题】:Amount of elements in ArrayList [duplicate]ArrayList 中的元素数量 [重复]
【发布时间】:2013-07-03 14:17:30
【问题描述】:

我正在构建一个聊天应用程序。当前,我在 ArrayList 中有所有消息,这让我开始思考 - ArrayList 设计包含多少元素? 100? 1.000? 10.000?

【问题讨论】:

标签: java arraylist


【解决方案1】:

ArrayList 不能容纳超过 Integer.MAX_VALUE 的元素。

所以 2147483647 是最大值。

【讨论】:

    【解决方案2】:

    ArrayList 的大小为Integer.MAX_VALUE

    /**
      * Returns the number of elements in this list.  If this list contains
      * more than <tt>Integer.MAX_VALUE</tt> elements, returns
      * <tt>Integer.MAX_VALUE</tt>.
      *
      * @return the number of elements in this list
      */
     int size();
    

    这是因为ArrayList 内部使用了数组,并且理论上数组的大小最大可以为Integer.MAX_VALUE。更多信息,您可以查看this

    【讨论】:

    • 这根本不能回答问题。 JavaDoc on size 只是说明了报告列表大小的限制,它没有说明关于列表的最大大小。
    • 答案完全具有误导性,size() JavaDoc 没有说明任何列表实现的最大大小。
    【解决方案3】:

    ArrayList 由数组支持,并且限制为数组的大小 - 即 Integer.MAX_VALUE。

    不过,LinkedList 的限制并不相同,它可以包含任意数量的元素。

    查看类似问题max. length of List in Java

    How many data a list can hold at the maximum 在列表的最大大小上有其他方面

    【讨论】:

    【解决方案4】:

    ArrayList 最多可以容纳任意数量的元素 Integer.MAX_VALUE - 这是由于设计决定使用 int 数据类型作为索引。然而重要的是你如何为它分配内存——内存分配很慢——以及你如何处理/访问元素。但是,仅从存储方面来看,您会受到MAX_VALUE 的限制。在 Java 中,这是 2^31-1 = 2,147,483,647。

    对于任何正常的应用程序,这应该足够了。但是,如果您需要更多,您可以轻松获取它的源代码并将其修改为使用 long 作为索引数据类型 - 然后受 Long.MAX_VALUE 的限制。

    【讨论】:

    • 原因不是因为选择了 int 索引本身。原因是由于 List 实现的后备存储被选择用于随机访问列表的所需(摊销)算法复杂性(这需要类似数组的行为)。反过来,这个后备存储(一个数组)在 Java/JVM 中也有这个限制。但是,可以实现 List 接口以使用负索引以及使用相同数据类型的索引 (int) 为用户提供 2^32 个可能的索引,例如使用两个数组和一些额外的对象作为后备存储一个数组。
    • @user268396 很公平,但是您仍然可以获取ArrayList 的源并对其进行修改以将最大大小增加到您想要的任何值。例如,以Object[][] 为后盾,并使用long 作为索引——现在你受到Integer.MAX_VALUE ^ 2 的限制。
    • 显然,但我更一般的观点是,在您的回答中(如前所述),推理忽略了实现的限制和实现的行为(性能/算法复杂性)之间的联系。从表面上看,一个合理的后续问题是:为什么要使用 ArrayList?如果它所能做的只是一个更有限的LinkedList 版本有什么好处。答案是“算法复杂性/性能”,但是限制并不明显,也没有解释。 :)
    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    相关资源
    最近更新 更多