如果我需要删除列表中的元素,则以下内容优于使用LinkedList
:
int j = 0;
List list = new ArrayList(1000000);
...
// fill in the list code here
...
for (Iterator i = list.listIterator(); i.hasNext(); j++) {
if (checkCondition) {
i.remove();
i = list.listIterator(j);
}
}
LinkedList
比ArrayList
更有效地“删除和添加元素”,但LinkedList
作为双向链接列表需要更多内存,因为每个元素都被包装为{{1}对象。虽然我需要一个单向Entry
接口,因为我按索引的升序运行。
答案 0 :(得分:2)
答案是:它取决于添加和删除的频率和分布。如果您不必经常删除单个,则可以使用链接列表。但是,ArrayList
上LinkedList
的主杀手是{{1}}的恒定时间随机访问。你不能用普通的链表真正做到这一点(但是,请查看跳过列表以获得一些灵感......)。相反,如果您要将元素 relative 删除到其他元素(其中,您需要删除下一个元素),那么您应该使用链接列表。
答案 1 :(得分:0)
对此没有简单的答案:
这取决于您的优化内容。您是否关心更多关于执行操作所花费的时间或列表使用的空间?
这取决于列表的长度。
这取决于您从列表中删除的元素的比例。
这取决于您对列表所做的其他事情。
这些决定因素中的一个或多个可能无法预先预测;即你真的不知道。所以我的建议是暂时解决这个问题;即根据直觉(或抛硬币)选择一个或另一个。如果您在此区域中存在可量化的性能问题,则可以稍后重新审视该决策...如cpu或内存使用情况分析所示。