1

我需要一个实现 Iterable 的类,并且不需要对并发使用是安全的。在 LinkedList、HashSet、ArrayList 等各种选项中,哪个是最轻的?

为了阐明用例,我需要能够向 Iterable 添加一些对象(通常为 3 或 4 个),然后需要对其进行迭代。

4

4 回答 4

5

数组列表。来自 Javadoc

添加操作在摊销常数时间内运行,即添加 n 个元素需要 O(n) 时间。所有其他操作都以线性时间运行(粗略地说)。与 LinkedList 实现相比,常数因子较低。

于 2009-10-13T17:54:27.797 回答
2

这完全取决于你所说的“最轻的重量”是什么意思。您需要执行哪些操作,多久执行一次?您事先知道最终尺寸吗?您是否要节省执行时间或内存?

我同意 zkarthik 这ArrayList通常是一个不错的选择......但如果你想创建一个大集合然后反复删除第一个元素,它会表现得很糟糕。有这么多不同的集合有一个很好的理由:它们在不同的情况下具有不同的性能特征。

于 2009-10-13T17:54:45.487 回答
1

它们都有非常不同的特性和行为,所以你应该根据你将如何使用它们来做出选择。例如,对于随机访问和高局部性,使用 ArrayList;如果您需要快速无序插入和查询,请使用 HashSet。

于 2009-10-13T17:55:51.310 回答
0

如果“轻量级”是指“最佳性能”,那么在不了解如何使用该集合的情况下几乎不可能回答这个问题。你告诉我们的只是它不需要支持并发使用,但为了有希望回答这个问题,我们需要知道类似的事情

  • 集合中将存储多少对象(平均)
  • 读写访问的相对频率是多少
  • 是否需要随机访问
  • 是否需要有序访问

许多人建议 ArrayList 可能是最好的。但是,我似乎记得读过(可能在 Effective Java 2nd edition 中),对于某些使用模式,Queue的性能优于 List,因为它不会产生随机访问的惩罚。换句话说,您可以以任何顺序从列表中添加/删除项目,但您只能以特定顺序添加/删除队列中的项目(即添加到尾部,从头部删除)。

于 2009-10-13T18:07:44.023 回答