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
这也是双向链表的标准删除算法,没有任何耗时的操作,全部是引用指针的变更,效率自然高了。
1700444070
1700444071
在实际测试中得知,处理大批量的删除动作,LinkedList比ArrayList快40倍以上。
1700444072
1700444073
(3)修改元素
1700444074
1700444075
写操作还有一个动作:修改元素值,在这一点上LinkedList输给了ArrayList,这是因为LinkedList是顺序存取的,因此定位元素必然是一个遍历过程,效率大打折扣,我们来看set方法的代码:
1700444076
1700444077
public E set(int index, E element){
1700444078
1700444079
//定位节点
1700444080
1700444081
Entry<E>e=entry(index);
1700444082
1700444083
E oldVal=e.element;
1700444084
1700444085
//节点的元素替换
1700444086
1700444087
e.element=element;
1700444088
1700444089
return oldVal;
[
上一页 ]
[ :1.70044404e+09 ]
[
下一页 ]