栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LinkedList源码解析(数据结构及底层实现)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LinkedList源码解析(数据结构及底层实现)

Main.java

public class Main{
    public static void main(String[] args){
        linkedList linkedList = new linkedList<>();
        linkedList.add("a1");
        linkedList.add("a2");
        linkedList.remove("a1");//或linkedList.remove(0).删除a1节点
    }
}

linkedList.java(源码,只提取操作中涉及的部分)

属性

public class linkedList extends AbstractSequentialList 
implements List, Deque, Cloneable,java.io.Serializable {
    transient int size = 0;
    transient Node first;
    // 指向最后一个结点
    transient Node last;
}

构造方法

public class linkedList extends AbstractSequentialList 
implements List, Deque, Cloneable,java.io.Serializable {
    public linkedList() {
    }
    public linkedList(Collection c) {
        this();
        addAll(c);
    }
}

add方法

public class linkedList extends AbstractSequentialList 
implements List, Deque, Cloneable,java.io.Serializable {
    
    // eg1: e="a1"
    public boolean add(E e) {
        linkLast(e);
        return true;
    }
    
    
    // eg1: e="a1"
    void linkLast(E e) {
        final Node l = last;
    
        // eg1: newNode    null<--"a1"-->null
        
        final Node newNode = new Node<>(l, e, null);
    
        
        last = newNode;
    
        // eg1: l=null
        if (l == null) {
            
            first = newNode; // eg1: first指向newNode
        } else {
            
            l.next = newNode;
        }
        size++;
        modCount++;
    }
}

remove方法

public class linkedList extends AbstractSequentialList 
implements List, Deque, Cloneable,java.io.Serializable {
    
    public boolean remove(Object o) {
        if (o == null) {
            for (Node x = first; x != null; x = x.next) {
                if (x.item == null) {
                    unlink(x);
                    return true;
                }
            }
        } else {
            for (Node x = first; x != null; x = x.next) {
                if (o.equals(x.item)) {
                    unlink(x);
                    return true;
                }
            }
        }
        return false;
    }
    
     
    // eg1: x  null<--"a1"-->"a2"
    E unlink(Node x) {
        // assert x != null;
        final E element = x.item;
        final Node next = x.next;
        final Node prev = x.prev;
    
        
        if (prev == null) {
            first = next; // 更新first头指针为x结点的后置结点
        } else {
            prev.next = next; // 将x的前置结点与x的后置结点相连接
            x.prev = null; // 断开x的前置指针
        }
    
        
        if (next == null) {
            last = prev;
        } else {
            next.prev = prev; // 将x的后置结点与x的前置结点相连接
            x.next = null; // 断开x的后置指针
        }
    
        x.item = null;
        size--;
        modCount++;
        return element;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/606702.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号