列表和集之间的性能和内存分配比较
2022-08-31 13:16:40
我想知道List和Set在性能,内存分配和可用性方面的比较。
如果我没有任何要求在对象列表中保持唯一性,也不需要维护插入顺序,我可以互换使用ArrayList和SortedSet /HashSet吗?直接使用集合类而不是甚至列表/集合会很好吗?
附言:我也不需要列出或设置java提供的特定函数。我使用List/Set而不是Array,因为它们可以在没有额外编程工作的情况下动态增长。
我想知道List和Set在性能,内存分配和可用性方面的比较。
如果我没有任何要求在对象列表中保持唯一性,也不需要维护插入顺序,我可以互换使用ArrayList和SortedSet /HashSet吗?直接使用集合类而不是甚至列表/集合会很好吗?
附言:我也不需要列出或设置java提供的特定函数。我使用List/Set而不是Array,因为它们可以在没有额外编程工作的情况下动态增长。
HashSet
与相同数量的元素相比,消耗的内存大约是相同数量的元素的5.5倍(尽管它们仍然是线性的),并且迭代速度明显较慢(尽管具有相同的渐近值);快速的Google搜索表明,与 相比,迭代速度减慢了2-3倍。ArrayList
HashSet
ArrayList
如果您不关心 的唯一性或 性能,请使用 。contains
ArrayList
如果你不关心排序,也不删除元素,那么它实际上归结为你是否需要在这个数据结构中找到元素,以及你需要多快的查找。
按值查找元素是 。在 中,它是 .HashSet
O(1)
ArrayList
O(n)
如果您仅使用容器来存储一堆独特的对象,并在最后(以任何顺序)迭代它们,那么可以说是一个更好的选择,因为它更简单,更经济。ArrayList