打字猴:1.70044404e+09
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 ]  [ 下一页 ]