0

如果我需要删除列表中的元素,以下会比使用更好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作为双向链表需要更多内存,因为每个元素都被包装为一个Entry对象。虽然我需要一个单向List接口,因为我是按索引升序运行的。

4

2 回答 2

2

答案是:这取决于添加和删除的频率和分布。如果您只需要不频繁地进行一次删除,那么您可以使用链表。然而,over a的主要杀手是恒定时间随机访问。你不能用一个普通的链表真正做到这一点(但是,看看一个跳过列表以获得一些灵感......)。相反,如果您要删除对于其他元素的元素(其中,您需要删除下一个元素),那么您应该使用链表。ArrayListLinkedList

于 2012-09-29T22:58:04.087 回答
0

对此没有简单的答案:

  • 这取决于您要优化的内容。您是否关心执行操作所花费的时间,或者列表使用的空间?

  • 这取决于列表的长度。

  • 这取决于您从列表中删除的元素的比例。

  • 这取决于您对列表执行的其他操作。

这些决定因素中的一个或多个可能无法预先预测;即你真的不知道。所以我的建议是暂时推迟它;即根据直觉(或掷硬币)选择一个或另一个。如果您在这方面有可量化的性能问题,您可以稍后重新考虑该决定......正如 cpu 或内存使用情况分析所证明的那样。

于 2012-09-30T00:53:24.617 回答