哈,我来说一下我的理解,在Java里面数组和链表的区别:
拿数组(Array)删除一个元素来说(以下为JDK源码):
public E remove(int index) {
rangeCheck(index);
modCount++;
E oldValue = elementData(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // clear to let GC do its work
return oldValue;
}
可以看出数组的删除某一个元素是:把该元素后面的所有元素都把下标往前移一,那么比如你数组有1kw个元素,你删除第一个,后面就要移动900多万次,这就是数组随机访问快,删除慢的缘故.
然而链表的,就是你说的,链表随机访问慢(查询某一个元素),但是新增一个元素比如
node1(next -> node2),node2(next->node3),node3(next->null)...
如果删除node2,则只需要改变node1(next->node3)就好了,增加一个元素的时候node4的时候,node3(next->node4)
如有疑问,请留言(最怕误导别人,如有理解错误之处,恳请各路大神指点)
其实在你不知道要操作第几个节点的时候,数组和链表的速度是一样的。
只有当你有要操作节点的引用时,才能真正对比数组和链表的优缺点。
也就是说你的问题其实隐含了一个条件,就是已知引用节点。