LinkedList源码分析(五)

举报
知识浅谈 发表于 2022/10/11 09:22:01 2022/10/11
【摘要】 LinkedList源码分析(五)

在这里插入图片描述

🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家
📌 擅长领域:全栈工程师、爬虫、ACM算法
💒 公众号:知识浅谈

LinkedList源码分析(五)总结
🤞这次都给他拿下🤞

正菜来了⛳⛳⛳

🎈LinkedList源码中的函数

🍮private static class Node<E> {}

含义:这个静态内部类Node表示的是表示的是List中节点,因为LinkedList是一个链表的形式,所以存储的是一个链表的结构,即每一个节点除了存储对应的元素值之外还要存储前置节点和后置接点的引用。

private static class Node<E> {
    E item;
    Node<E> next;
    Node<E> prev;
    Node(Node<E> prev, E element, Node<E> next) {
        this.item = element;
        this.next = next;
        this.prev = prev;
    }
}

🍮Object clone()

含义:返回一个克隆的对象,但是这个拷贝是一个浅拷贝的,元素本身是没有被重新创建的,也就是Node中的item可能是一个引用,但是clone出来的两个对象中的item是不变的,从下边的clone.add(x.item);语句中可以看出clone的时候只是创建一个新的list,并且把现有的list中的元素添加到新创建的list中。

public Object clone() {
    LinkedList<E> clone = superClone();

    // Put clone into "virgin" state
    clone.first = clone.last = null;
    clone.size = 0;
    clone.modCount = 0;

    // Initialize clone with our elements
    for (Node<E> x = first; x != null; x = x.next)
        clone.add(x.item);

    return clone;
}

🍮public Object[] toArray()

含义:toArray这个函数就是把列表中的所有元素方法一个数组中,并返回,相当于把链表数组化了。

public Object[] toArray() {
    Object[] result = new Object[size];
    int i = 0;
    for (Node<E> x = first; x != null; x = x.next)
        result[i++] = x.item;
    return result;
}

🍮writeObject(java.io.ObjectOutputStream s)

含义:见名知意,这个函数的意思是把LinkedList中的每个元素序列化为数据流到s中去,从下边的函数中可以看出总共有两个类型,一个是写的LinkedList的size即LinkedList的元素数量,另一个是把所有元素写道流中。

private void writeObject(java.io.ObjectOutputStream s)
    throws java.io.IOException {
    // Write out any hidden serialization magic
    s.defaultWriteObject();

    // Write out size
    s.writeInt(size);

    // Write out all elements in the proper order.
    for (Node<E> x = first; x != null; x = x.next)
        s.writeObject(x.item);
}

🍮readObject(java.io.ObjectOutputStream s)

含义:这个函数的意思和上边的writeObject是相反的,上边的函数是序列化,下边的函数是反序列化,即把s流中的字节流反序列化为LinkedList中的元素。

private void readObject(java.io.ObjectInputStream s)
  throws java.io.IOException, ClassNotFoundException {
    // Read in any hidden serialization magic
    s.defaultReadObject();

    // Read in size
    int size = s.readInt();

    // Read in all elements in the proper order.
    for (int i = 0; i < size; i++)
        linkLast((E)s.readObject());
}

🍚总结

以上是是关于LinkedList源码分析的总结,希望有所帮助,下篇,开始读Collection中的set集合。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。