首页 > 其他分享 >LinkedList

LinkedList

时间:2023-02-19 17:44:40浏览次数:31  
标签:index 结点 null LinkedList next element prev

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;				    //返回旧结点的值
}

标签:index,结点,null,LinkedList,next,element,prev
From: https://www.cnblogs.com/xiaomitu/p/17135180.html

相关文章

  • LinkedList的使用
    importjava.util.Iterator;importjava.util.LinkedList;importjava.util.ListIterator;publicclassDemo01{publicstaticvoidmain(String[]args){......
  • LinkedList
    LinkedList是基于双向循环链表实现的,除了可以当作链表操作外,它还可以当作栈、队列和双端队列来使用;LinkedList是非线程安全的,只在单线程下适合使用;LinkedList的底层是通......
  • java LinkedList集合特有功能
    javaLinkedList集合特有功能       ......
  • java: 小王子单链表 ------ ( LinkedList )
    java.util包中的LinkedList<E>泛型类创建的对象以链表结构存储数据,习惯上称LinkedList类创建的对象为链表对象。LinkedList<String>myList=newLinkedList<String>(......
  • LinkedList
    说明:底层实现了双向链表和双端队列特点可以添加重复元素,包括null线程不安全,没有实现同步LinkedList的底层操作机制:LinkedList底层维护了一个双向链表LinkedList中......
  • JDK 1.8 LinkedList 关键代码分析 重要属性和add
       /**   *有序(输入有序),不唯一    *底层实现是双向链表   *易修改,不易查询    */publicclassLinkedList<E>   extendsAbstractSequenti......
  • ArrayList和LinkedList的区别
    ArrayList:基于动态数组。连续内存存储,适合下标访问(随机访问)。扩容机制:因为数组长度固定,超出长度存数据时需要新建数组,将老数组数据拷贝到新数组,如果不是尾部插入数据还会涉......
  • Java集合之LinkedList源码分析
    LinkedList文章目录​​LinkedList​​​​LinkedList介绍​​​​LinkedList的方法总结​​​​LinkedList源码分析​​​​GetElement​​​​RemoveElement​​​​......
  • 比较ArrayList与LinkedList
    比较ArrayList与LinkedList底层实现ArrayList是数组-顺序表LinkedList是双向链表增加第一条数据时LinkedList的更快因为ArrayList默认初始化时创建容量为10的数组空......
  • 集合3 LinkedList
    LinkedList底层双向链表基础增删改查publicclass_LinkedList{publicstaticvoidmain(String[]args){//TODO集合-Collection-LinkedList=......