java linkedlist 删除_Java LinkedList.remove() 删除数据

首页 > 基础教程 > 集合框架 > LinkedList类

Java LinkedList.remove() 删除数据

方法

remove():获取并移除此列表的头(第一个元素)。

remove(int index):移除此列表中指定位置处的元素。

remove(Objec o):从此列表中移除首次出现的指定元素(如果存在)。

removeFirst():移除并返回此列表的第一个元素。

removeFirstOccurrence(Object o):从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表时)。

removeLast():移除并返回此列表的最后一个元素。

removeLastOccurrence(Object o):从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表时)。

源码分析

几个remove方法最终都是调用了一个私有方法:remove(Entry e),只是其他简单逻辑上的区别。下面分析remove(Entry e)方法。

private E remove(Entry < E > e) {

if (e == header) throw new NoSuchElementException();

// 保留将被移除的节点e的内容

E result = e.element;

// 将前一节点的next引用赋值为e的下一节点

e.previous.next = e.next;

// 将e的下一节点的previous赋值为e的上一节点

e.next.previous = e.previous;

// 上面两条语句的执行已经导致了无法在链表中访问到e节点,而下面解除了e节点对前后节点的引用

e.next = e.previous = null;

// 将被移除的节点的内容设为null

e.element = null;

// 修改size大小

size--;

modCount++;

// 返回移除节点e的内容

return result;

}

由于删除了某一节点因此调整相应节点的前后指针信息,如下:

e.previous.next = e.next;//预删除节点的前一节点的后指针指向预删除节点的后一个节点。

e.next.previous = e.previous;//预删除节点的后一节点的前指针指向预删除节点的前一个节点。

清空预删除节点:

e.next = e.previous = null;

e.element = null;

交给gc完成资源回收,删除操作结束。与ArrayList比较而言,LinkedList的删除动作不需要“移动”很多数据,从而效率更高。

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值