假设您需要在Collection
中存储/检索项目,不关心顺序,并且允许重复,您使用什么类型的Collection
?
默认情况下,我一直使用 ArrayList
,但我记得在某处读到/听到过,Queue
实现可能是更好的选择。 List
允许在任意位置添加/检索/删除项目,这会导致性能下降。由于 Queue
不提供此功能,理论上它在不需要此功能时应该更快。
我意识到所有关于性能的讨论都有些毫无意义,唯一真正重要的是衡量。不过,我很想知道其他人在Collection
中使用什么,当他们不关心顺序并且允许重复时,为什么?
最佳答案
“这取决于”。你真正需要首先回答的问题是“我想用这个集合做什么?”
如果您经常在其中一端(开始、结束)插入/删除项目,Queue
将优于 ArrayList
。然而,在许多情况下,您创建一个集合只是为了从中读取。在这种情况下,ArrayList 的效率要高得多:因为它是作为数组实现的,所以您可以非常高效地对其进行迭代(同样适用于 LinkedList
)。然而,LinkedList 使用引用将单个项目链接在一起。因此,如果您不需要随机移除项目(在中间),ArrayList
会更好:ArrayList
将使用更少的内存,因为项目不需要存储用于引用下一个/上一个项目。
总结一下:
ArrayList
= 如果您插入一次并经常读取(随机访问或顺序访问)则很好
LinkedList
= 如果您经常在随机位置插入/删除并且只按顺序读取则很好
ArrayDeque
(仅限 java6)= 如果您在开始/结束处插入/删除并随机或顺序读取则很好
关于java - 默认集合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3510203/