java - 默认集合类型

标签 java collections

假设您需要在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/

相关文章:

Java -DKRB5CCNAME 不工作

java - 在描述中给出的场景中如何暂停程序执行?

java - 使用 Gradle 命令创建 Serenity BDD 骨架项目

java - 不兼容的类型 : java. lang.Object 无法转换为 java.lang.String

java - 从对象创建 Collection<object>

c# - 如何确定在 WPF 中使用哪个集合

java - GC 日志中的 GC 暂停持续时间

Java 9 javapacker 在创建 bss 时找不到 jfxrt.jar。在 Linux 下似乎在 "createbss"模式下完全损坏。如何避免错误?

java - 数组和数组列表之间的存储机制?

java - 如何从第 n 个字符开始对文件中的行进行排序?