Pri*_*shi 53 java collections list set
我想知道List和Set在性能,内存分配和可用性方面的比较.
如果我没有要求在对象列表中保持唯一性,则既不需要维护插入顺序,我可以交替使用ArrayList和SortedSet/HashSet吗?直接使用Collections类而不是列表/集合会不会很好?
PS我也不需要列表或设置java提供的特定功能.我只使用List/Set而不是Array,因为它们可以动态增长而无需额外的编程工作.
Lou*_*man 79
HashSet
消耗的内存大约ArrayList
是相同数量元素的5.5倍(尽管它们都是线性的),并且迭代速度明显较慢(尽管具有相同的渐近线); 一个快速的谷歌搜索建议HashSet
迭代的速度减少2-3倍ArrayList
.
如果您不关心其独特性或性能contains
,请使用ArrayList
.
NPE*_*NPE 48
如果您不关心排序,并且不删除元素,那么它实际上归结为您是否需要在此数据结构中查找元素,以及您需要多快查找这些元素.
在这一发现通过值的元素HashSet
IS O(1)
.在一个ArrayList
,它是O(n)
.
如果你只是使用容器来存储一堆独特的对象,并在最后(以任何顺序)迭代它们,那么可以ArrayList
说它是更好的选择,因为它更简单,更经济.