Java为链表查询慢,增删快呢? 增删的话,不是也要先查询它前面是谁吗?

2025-04-01 23:05:51
推荐回答(2个)
回答1:

哈,我来说一下我的理解,在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)

如有疑问,请留言(最怕误导别人,如有理解错误之处,恳请各路大神指点)

回答2:

其实在你不知道要操作第几个节点的时候,数组和链表的速度是一样的。
只有当你有要操作节点的引用时,才能真正对比数组和链表的优缺点。

也就是说你的问题其实隐含了一个条件,就是已知引用节点。