什么是Java最轻的非并发Iterable实现?

时间:2009-10-13 17:50:49

标签: java optimization space-efficiency

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

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

4 个答案:

答案 0 :(得分:5)

的ArrayList。来自Javadoc

  

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

答案 1 :(得分:2)

这完全取决于你所说的“最轻的重量”。您需要做什么操作,以及经常进行哪些操作?你事先知道最终尺寸吗?您是在尝试节省执行时间还是内存?

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

答案 2 :(得分:1)

它们都具有非常不同的功能和行为,因此您应该根据自己的使用方式做出选择。例如,对于随机访问和高位置,使用ArrayList;如果您需要快速无序插入和查询,请使用HashSet。

答案 3 :(得分:0)

如果通过“轻量级”,您的意思是“最佳性能”,那么在不了解如何使用该集合的情况下几乎无法回答该问题。所有你告诉我们的是它不需要支持并发使用,但是为了回答这个问题,我们需要知道像

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

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