【发布时间】:2010-12-17 21:35:06
【问题描述】:
我必须创建一个包含 n 个元素的大列表(最多可达 100,000 个)。列表中的每个元素都是一个与列表索引等效的整数。在此之后,我必须在此列表上调用 Collections.shuffle。我的问题是,应该使用哪个列表实现(java 集合或 apache 集合)。我的直觉是 ArrayList 可以在这里很好地使用。 所有的想法都值得赞赏。 谢谢!
感谢您的意见。我想我坚持使用 ArrayList。我目前正在使用带有 initialCapacity 参数的 ArrayList 构造函数,并且我传递了列表的大小。因此,如果原始列表是 100000,我使用 new ArrayList(100000); 创建这个新列表;因此,我认为我没有创建数组并执行 asList,因为不会有任何调整大小。此外,像 GrowthList 和 LazyList 这样的大多数 apache 集合列表都没有实现 RandomAccess。这肯定会减慢 shuffle(根据 javadocs)。 FastArrayList 确实实现了 RandomAccess,但 apache 对这个类有一个注释说“这个类不是跨平台的。在某些架构上使用它可能会导致意外失败”。
【问题讨论】:
-
您能详细说明您想要达到的目标吗?
-
添加和改组后的列表如何处理?您是否在中间添加/删除元素?您是否在末尾添加/删除元素?您是按任意顺序访问中间的元素,还是从一端到另一端进行单次传递?在不知道你将要做什么的情况下,真的很难做出决定。如果您只想连续添加数字并随机播放,我会说 ArrayList 就是答案。
-
100000 这些天并没有那么大。以最简单的方式使用数组列表在我的机器上花费不到 100 毫秒(Intel Core2 T5600 的单核 @ 1.83GHz)。
标签: java list apache-commons shuffle