我有一个带有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));
}
答案 0 :(得分:1)
将元素放在索引N是非常昂贵的,因为实际到达元素需要遍历列表节点,直到到达元素。
现在当你删除循环中的元素时,要意识到你总是删除列表中的 last 元素(你的i与list.size()完全对应 - 在该循环中始终为1 )。
节点(索引)方法实际上通过从前/后搜索来优化访问,具体取决于索引是否接近0或list.size()。在你的情况下删除它总是从后面搜索并在第一次尝试时点击。
要学习的课程:LinkedList 不是一个合适的列表类型,可以通过随机索引进行访问。
答案 1 :(得分:0)
在进入第一个循环之前,您似乎没有轮询System.currentTimeMillis()
(获取当前时间)。