删除列表元素-我在Java中获得最佳性能的方法
如果我需要删除列表中的元素,以下操作是否比使用删除列表元素-我在Java中获得最佳性能的方法,java,arraylist,linked-list,Java,Arraylist,Linked List,如果我需要删除列表中的元素,以下操作是否比使用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.listIt
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
需要更多内存,因为每个元素都包装为条目
对象。虽然我需要一个单向的列表
界面,因为我正在按索引的升序运行。答案是:这取决于添加和删除的频率和分布。如果您不经常只需要执行一次删除,那么您可以使用链表。然而,ArrayList
在LinkedList
上的主要杀手是恒定时间随机访问。使用普通的链表是无法做到这一点的(不过,请查看跳过列表以获得一些灵感)。相反,如果要删除相对于其他元素的元素(其中,需要删除下一个元素),则应使用链表。对此没有简单的答案:
- 这取决于你在优化什么。您是否更关心执行操作所需的时间或列表所使用的空间
- 这取决于列表的长度
- 这取决于要从列表中删除的元素的比例
- 这取决于你对列表所做的其他事情
这些决定因素中的一个或多个很可能是事先无法预测的;i、 你真的不知道。因此,我的建议是暂时推迟;i、 e.根据直觉选择一个或另一个(或掷硬币)。如果您在这方面存在可量化的性能问题,您可以稍后重新考虑该决定。。。如cpu或内存使用情况分析所示 你需要定义“更好”——最重要的是速度还是内存?肯定同意@DNA,还要改进访问模式/添加/删除频率。