java编程--LinkedList详解

一.LinkedList的源码分析
继承关系介绍

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable

LinkedList继承了AbstractSequentialList,实现了get等方法
LinkedList实现了Dequed接口,可以作为双端队列使用
LinkedList实现Cloneable接口重写了接口定义的clone()方法,可以使用clone()复制链表
LinkedList实现 java.io.Serializable接口使LinkedList支持序列化
属性介绍

transient int size = 0;//元素个数初始化
transient int size = 0;//定义头结点
transient int size = 0;//定义尾节点

构造函数介绍
其中的有参构造函数进行数据添加操作

public LinkedList() {
    }
     public LinkedList(Collection<? extends E> c) {
        this();
        addAll(c);
    }

内部类
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;
        }
    }

方法介绍
add(E e)该方法用于向列表的末尾添加一个元素,并返回是否添加成功

 public boolean add(E e) {
        linkLast(e);
        return true;
    }

remove(Object o)
该方法用于删除一个给定的元素o,删除第一个在列表中找到的o元素

public boolean remove(Object o) {
        if (o == null) {
            for (Node<E> x = first; x != null; x = x.next) {
                if (x.item == null) {
                    unlink(x);
                    return true;
                }
            }
        } else {
            for (Node<E> x = first; x != null; x = x.next) {
                if (o.equals(x.item)) {
                    unlink(x);
                    return true;
                }
            }
        }
        return false;
    }

addFist(E e)在列表第一个位置添加一个元素

 public void addFirst(E e) {
        linkFirst(e);
    }

addLast(E e)在列表末尾添加一个元素

public void addLast(E e) {
        linkLast(e);
    }

removeFist()用于删除第一个元素,如果列表为空,则抛出NoSuchElementException异常,返回第一个元素的值

 public E removeFirst() {
        final Node<E> f = first;
        if (f == null)
            throw new NoSuchElementException();
        return unlinkFirst(f);
    }

removeLast()用于删除最后一个元素,如果列表为空,则抛出NoSuchElementException的异常,返回最后一个元素的值

 public E removeLast() {
        final Node<E> l = last;
        if (l == null)
            throw new NoSuchElementException();
        return unlinkLast(l);
    }

getFirst()该方法用于返回第一个元素,列表中没有则抛出NoSuchElementException异常

 public E getFirst() {
        final Node<E> f = first;
        if (f == null)
            throw new NoSuchElementException();
        return f.item;
    }

getLast()该方法用于返回列表的最够一个元素,列表中没有则抛出NoSuchElementException的异常

public E getLast() {
        final Node<E> l = last;
        if (l == null)
            throw new NoSuchElementException();
        return l.item;
    }

二ArrayList和LinkedList的联系
ArrayList和LinkedList都是实现了List接口的容器,用于存储一系列的对象引用,他们都可以对元素进行增删改查。
区别:1.ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构
2.对于于随机访问的get和set方法,ArrayList要由于LinkedList,因为LinkedList要移动指针
3.对于新增和删除操作add和removeLinkedList比较占优势,因为ArrayList要移动数组

你可能感兴趣的:(笔记)