我经常在我的Android应用程序中使用列表。现在,我正在创建一个Twitter页面,其中列出了最多50个用户的“tweet”。
我有一个定义如下的列表:
List<Tweet> tweets = new ArrayList<Tweet>(MAX_TWEETS);
其中,Tweet是保存twitter更新信息(文本、日期、用户名等)的自定义对象类型,而MAX_TWEETS是一个常量整数值(50)。
问题:
设置这个List的初始容量(如果有的话)有什么好处?
当我知道我的清单会这么小的时候,我是否应该设置一个容量呢?我应该在什么时候/不应该设置一个能力?
发布于 2011-05-25 18:21:29
ArrayList的默认容量设置为10 (参见JDK1.6源代码)。这意味着在创建时将分配大小为10的数组。如果要添加元素11,容量将增加到16,然后在达到21时再次增加。
如果您不期望超过50个元素,数组将最多调整3次大小。考虑到这么小的数目,这真的不重要。将其设置为50,如果它给了你一张保存数组副本的想法。
实际上,这是正确的尺寸增长公式:
int newCapacity = (oldCapacity * 3)/2 + 1;发布于 2011-05-25 18:16:41
在填充列表时,设置初始容量可以提高性能,如果您向列表中添加的项数不超过该数量,则还可以减少列表的内存占用。
通过调用trimToSize(),可以减少已增长的列表的内存占用量,并且可能有一个大于存储项数量的后备数组。
发布于 2011-05-25 18:17:14
默认情况下,在Java 6中,列表的大小为10,也就是说,系统在基础数组中创建10个内存槽。如果尝试添加第11个元素,则只创建Array副本。提供一个大小可以提高性能。
https://stackoverflow.com/questions/6128900
复制相似问题