为什么get(index)比Java中的LinkedList的删除(索引)慢

时间:2017-06-01 17:22:00

标签: java

我有一个带有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);
}

以纳秒为单位的时间:2310625

LinkedList的功能:

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

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

2 个答案:

答案 0 :(得分:1)

将元素放在索引N是非常昂贵的,因为实际到达元素需要遍历列表节点,直到到达元素。

现在当你删除循环中的元素时,要意识到你总是删除列表中的 last 元素(你的i与list.size()完全对应 - 在该循环中始终为1 )。

节点(索引)方法实际上通过从前/后搜索来优化访问,具体取决于索引是否接近0或list.size()。在你的情况下删除它总是从后面搜索并在第一次尝试时点击。

要学习的课程:LinkedList 是一个合适的列表类型,可以通过随机索引进行访问。

答案 1 :(得分:0)

在进入第一个循环之前,您似乎没有轮询System.currentTimeMillis()(获取当前时间)。