列表和集之间的性能和内存分配比较

2022-08-31 13:16:40

我想知道List和Set在性能,内存分配和可用性方面的比较。

如果我没有任何要求在对象列表中保持唯一性,也不需要维护插入顺序,我可以互换使用ArrayList和SortedSet /HashSet吗?直接使用集合类而不是甚至列表/集合会很好吗?

附言:我也不需要列出或设置java提供的特定函数。我使用List/Set而不是Array,因为它们可以在没有额外编程工作的情况下动态增长。


答案 1

HashSet与相同数量的元素相比,消耗的内存大约是相同数量的元素的5.5倍(尽管它们仍然是线性的),并且迭代速度明显较慢(尽管具有相同的渐近值);快速的Google搜索表明,与 相比,迭代速度减慢了2-3倍。ArrayListHashSetArrayList

如果您不关心 的唯一性或 性能,请使用 。containsArrayList


答案 2

如果你不关心排序,也不删除元素,那么它实际上归结为你是否需要在这个数据结构中找到元素,以及你需要多快的查找。

按值查找元素是 。在 中,它是 .HashSetO(1)ArrayListO(n)

如果您仅使用容器来存储一堆独特的对象,并在最后(以任何顺序)迭代它们,那么可以说是一个更好的选择,因为它更简单,更经济。ArrayList