LinkedList

LinkedList

LinkerList使用的是双向链表,其基本的增删改查如下:

增加

示例代码如下:

List<Object> list=new LinkedList<>();
list.add(Object e);	//默认创建一个结点添加元素
list.add(int index, Object element);	//在index下标添加元素

源码实现如下:

public void add(int index, E element) {
	checkPositionIndex(index);			//检查要插入的位置是否越界
    if (index == size)				    //如果下标是等于当前链表大小,则进行尾插
		linkLast(element);
    else
         linkBefore(element, node(index));	//否则指定位置插入
}

删除

示例代码如下:

list.remove(Object o);	//删除指定元素的结点
list.remove(int index);	//删除指定位置的结点

源码实现如下:

public boolean remove(Object o) {
    if (o == null) {	、//判断要删除的对象是否为空对象
        for (Node<E> x = first; x != null; x = x.next) {
            if (x.item == null) {	//遍历整个链表,如果有空对象这个结点,则执行unlink()方法
                unlink(x);
                return true;
            }
        }
    } else {
        //如果要删除的结点不是空结点,则遍历整个链表
        for (Node<E> x = first; x != null; x = x.next) {
            //判断链表中是否有和要删除值一样的结点,右则执行unlink()方法
            if (o.equals(x.item)) {
                unlink(x);
                return true;
            }
        }
    }
    return false;
}

E unlink(Node<E> x) {
        // assert x != null;
        final E element = x.item;
        final Node<E> next = x.next;
        final Node<E> prev = x.prev;

        if (prev == null) {
            first = next;
        } else {
            prev.next = next;
            x.prev = null;
        }

        if (next == null) {
            last = prev;
        } else {
            next.prev = prev;
            x.next = null;
        }

        x.item = null;
        size--;
        modCount++;
        return element;
    }

修改

示例代码如下:

list.set(int index, Object e);	//在指定index位置修改新的值为e

源代码实现如下:

public E set(int index, E element) {
    checkElementIndex(index);		//检查是否越界
    Node<E> x = node(index);		//找到需要修改的结点
    E oldVal = x.item;			    //将该结点的值替换为需要更新的值
    x.item = element;			    
    return oldVal;				    //返回旧结点的值
}
posted @   LilyFlower  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示