【发布时间】:2013-07-03 14:17:30
【问题描述】:
我正在构建一个聊天应用程序。当前,我在 ArrayList 中有所有消息,这让我开始思考 - ArrayList 设计包含多少元素? 100? 1.000? 10.000?
【问题讨论】:
-
小心线程问题。
-
@MarounMaroun 不是每个人都有足够的代表来近距离投票。
我正在构建一个聊天应用程序。当前,我在 ArrayList 中有所有消息,这让我开始思考 - ArrayList 设计包含多少元素? 100? 1.000? 10.000?
【问题讨论】:
ArrayList 不能容纳超过 Integer.MAX_VALUE 的元素。
所以 2147483647 是最大值。
【讨论】:
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。
【讨论】:
size() JavaDoc 没有说明任何列表实现的最大大小。
ArrayList 由数组支持,并且限制为数组的大小 - 即 Integer.MAX_VALUE。
不过,LinkedList 的限制并不相同,它可以包含任意数量的元素。
查看类似问题max. length of List in Java
How many data a list can hold at the maximum 在列表的最大大小上有其他方面
【讨论】:
ArrayList 最多可以容纳任意数量的元素 Integer.MAX_VALUE - 这是由于设计决定使用 int 数据类型作为索引。然而重要的是你如何为它分配内存——内存分配很慢——以及你如何处理/访问元素。但是,仅从存储方面来看,您会受到MAX_VALUE 的限制。在 Java 中,这是 2^31-1 = 2,147,483,647。
对于任何正常的应用程序,这应该足够了。但是,如果您需要更多,您可以轻松获取它的源代码并将其修改为使用 long 作为索引数据类型 - 然后受 Long.MAX_VALUE 的限制。
【讨论】:
int) 为用户提供 2^32 个可能的索引,例如使用两个数组和一些额外的对象作为后备存储一个数组。
ArrayList 的源并对其进行修改以将最大大小增加到您想要的任何值。例如,以Object[][] 为后盾,并使用long 作为索引——现在你受到Integer.MAX_VALUE ^ 2 的限制。
LinkedList 版本有什么好处。答案是“算法复杂性/性能”,但是限制并不明显,也没有解释。 :)