Java集合 - LinkedList


LinkedList 同时实现了List接口Deque接口,也就是说它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack)。但是关于栈或队列,现在的首选是ArrayDeque,它有着比inkedList(当作栈或队列使用时)有着更好的性能。
总结

1.  底层基于双向链表实现,在内存中是非连续的,增加、删除、修改头尾及已知结点很快,(未知结点)查找较慢。
2.  实现了List,和Deque接口,能将LinkedList当做双端队列使用,既可以作为队列也可以做栈。
3.  LinkedList 线程非安全。
4.  可储存多个null。
5.  覆盖了函数clone(),能被克隆

属性

transient int size; // 链表大小
transient LinkedList.Node<E> first;  // 指向头结点
transient LinkedList.Node<E> last;  // 指向尾结点

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

构造方法

两个构造方法:1. 无参构造方法 2. 集合构造方法

主要方法

添加

public boolean add(E e); // 在末尾插入,last指向链表末尾,速度快
public void add(int index, E element); //在Node(index)之前插入,要先找Node,双向链表查迅速度快,但是和ArrayList还是慢一些,LinkBefore()
public boolean addAll(Collection<? extends E> c);  // 并非直接调用 add(E e);
public boolean addAll(int index, Collection<? extends E> c); // ModCount+1
/**
将集合连接为一个链表再插入
*/

删除

为了让GC更快可以回收放置的元素,需要将node之间的引用关系赋空。

public void clear() ;  // 删除所有元素
public E remove(int index);

修改

public E set(int index, E element)

查找

public E get(int index);
public int indexOf(Object o); 
public int lastIndexOf(Object o);

Queue方法

public E peek()  // 查看头部的结点

public E element()   // 查看头部的结点
public E poll()  // 出队列
    
public E remove()  // 出队列
public boolean offer(E e)  // 入队列

Stack方法

public boolean offerFirst(E e)  // 顶部入栈
    
public boolean offerLast(E e)    // 低部入栈
    
public E peekFirst() // 显示顶部
public E peekLast() // 显示底部
    
public E pollFirst() // 出栈(顶部)
public E pollLast() // 出栈(底部)
    
public void push(E e) // 顶部入栈
public E pop()  //顶部出栈
    
public boolean removeFirstOccurrence(Object o) // 删除以最先出栈的O
public boolean removeLastOccurrence(Object o) // 删除最后出栈的o

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值