我有一个包含100000个String项的LinkedList。当我使用诸如get,remove,add之类的索引进行操作时,似乎具有相同的机制。
首先,它浏览列表以访问Node [index],然后进行另一种操作,
使用“ get”,它仅引用Node的项目,而即使“ remove”也执行更多操作。
但是,为什么“获取”操作比“删除”操作要花更多时间

for(int index=99999;index>=0;index--){
    links.get(index);
}


得到时间以纳秒为单位:15083052805

for(int index=99999;index>=0;index--){
    links.remove(index);
}


DEL时间(以纳秒为单位):2310625

LinkedList的功能:

public E get(int index) {
    checkElementIndex(index);
    return node(index).item;
}

public E remove(int index) {
    checkElementIndex(index);
    return unlink(node(index));
}

最佳答案

将元素获取到索引N的开销非常大,因为要实际到达元素,必须遍历列表节点,直到到达元素为止。

现在,当您删除循环中的元素时,请意识到您始终会删除列表的最后一个元素(您的i在该循环中始终都与list.size()-1完全对应)。

实际上,node(index)方法通过从前/后进行搜索来优化访问,具体取决于index是接近于0还是list.size()。在您删除它的情况下,总是从后面搜索并在第一次尝试时就命中。

经验教训:LinkedList不是适合通过随机索引访问的列表类型。

10-04 23:26
查看更多