打字猴:1.70044402e+09
1700444020
1700444021 //列表长度减1,并且最后一位设为null
1700444022
1700444023 elementData[—size]=null;
1700444024
1700444025 //返回删除的值
1700444026
1700444027 return oldValue;
1700444028
1700444029 }
1700444030
1700444031 注意看,index位置后的元素都向前移动了一位,最后一个位置空出来了,这又是一次数组拷贝,和插入一样,如果数据量大,删除动作必然会暴露出性能和效率方面的问题。ArrayList其他的两个删除方法与此相似,不再赘述。
1700444032
1700444033 我们再来看看LinkedList的删除动作。LinkedList提供了非常多的删除操作,比如删除指定位置元素、删除头元素等,与之相关的poll方法也会执行删除动作,下面来看最基本的删除指定位置元素的方法remove,源代码如下:
1700444034
1700444035 private E remove(Entry<E>e){
1700444036
1700444037 //取得原始值
1700444038
1700444039 E result=e.element;
1700444040
1700444041 //前节点next指向当前节点的next
1700444042
1700444043 e.previous.next=e.next;
1700444044
1700444045 //后节点的previouse指向当前节点的previous
1700444046
1700444047 e.next.previous=e.previous;
1700444048
1700444049 //置空当前节点的next和previous
1700444050
1700444051 e.next=e.previous=null;
1700444052
1700444053 //当前元素置空
1700444054
1700444055 e.element=null;
1700444056
1700444057 //列表长度减1
1700444058
1700444059 size—;
1700444060
1700444061 //修改计数器+1
1700444062
1700444063 modCount++;
1700444064
1700444065 return result;
1700444066
1700444067 }
1700444068
1700444069 这也是双向链表的标准删除算法,没有任何耗时的操作,全部是引用指针的变更,效率自然高了。
[ 上一页 ]  [ :1.70044402e+09 ]  [ 下一页 ]