Java基础之LinkedList知识点总结

一.LinkedList的使用

初始化
new LinkedList<E>()
new LinkedList<E>(Collection <? extends E>)
两种初始化方法,第二种可以利用其它Collection初始化。

作为队列使用

  • offer() 往队里添加元素
  • poll() 获取并删除队列头的元素
  • peek() 获取队列头的元素,但不删除

作为栈使用

  • push() 往栈中添加元素
  • pop() 弹出栈中的元素
  • peek() 获取栈顶元素,但不弹出

二.LinkedList的底层数据结构

LinkedList的底层数据结构是链表。它的基本元素是一个自己实现的Node类:

    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;
        }
    }

在LinkedList中,维护了链表的第一个节点first、最后一个节点last和当前链表的长度size这三个基本信息。从Node的源码可以看出,它有next、prev两个指针。而实际上LinkedList的构成就是一个双向链表。

三.LinkedList源码中的基本方法

封装了一些对链表进行基本操作的方法,如在头部添加、在头部删除、在尾部添加、在尾部删除、删除某个指定节点等,基于此再实现add(),remove()等方法供外部调用。

四.LinkedList的序列化和反序列化

与ArrayList类似,LinkedList也实现了自己的readObject和writeObject方法,来支持序列化和反序列化。

五.克隆

LinkedList实现了cloneable接口,重写了clone()方法来实现了拷贝。LinkedList实现的是浅拷贝,即对拷贝对象的改变会影响被拷贝对象。

六.转换为数组

与ArrayList类似,使用toArray(T[] a)可转换为指定类型的数组

七.迭代器

LinkedList实现了比Iterator更为强大的ListIterator迭代器,不仅可以从前往后遍历还可以在遍历过程中倒退,访问之前的元素。

  • hasNext() 是否有下一个元素

  • next() 获取下一个

  • hasPrevious() 是否有前一个元素

  • previous() 获取前一个元素

  • remove()删除刚刚next或previous得到的元素;在调用之前必须先调用一次next或previous

  • public ListIterator<E> listIterator(int index) 获取一个ListIterator,index为开始位置,要求index >=0且<=size

猜你喜欢

转载自blog.csdn.net/weixin_34293902/article/details/87541072