Java集合之LinkedList

Posted yanghanwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合之LinkedList相关的知识,希望对你有一定的参考价值。

一、基础

  LinkedList不是线程安全的,多线程建议使用Vector;

  LinkedList 底层使用的是 双向链表 数据结构(JDK1.6之前为循环链表,JDK1.7取消了循环);

  LinkedList 不支持高效的随机元素访问;

  实现了Cloneable接口,表明能被克隆;

  实现了Serializabble接口,表明能序列化之后传输;

二、源码方法

  构造方法:

  无参构造方法public LinkedList() { },构造一个空的list

  一个指定collection的构造函数public LinkedList(Collection<? extends E> c)构造一个包含指定collection的元素的列表,这些元素是按照该collection的迭代器返回它们的顺序排列的

  方法:

  add(E e) 方法:将元素添加到链表尾部,添加成功返回true

  add(int index,E e):在指定位置添加元素,会先检查索引是否处于[0-size]之间

  addAll(Collection c ):将集合插入到链表尾部,添加成功返回true

  addAll(int index, Collection c): 将集合从指定位置开始插入,会先检查索引是否处于[0-size]之间,添加成功返回true

  addFirst(E e): 将元素添加到链表头部

  addLast(E e): 将元素添加到链表尾部,与 add(E e) 方法一样

  get(int index): 根据指定索引返回数据

  getFirst() 和element() 方法将会在链表为空时,抛出NoSuchElementException,element()方法的内部就是使用getFirst()实现的

  peek(),peekFirst()链表为空时返回null

  getLast() 方法在链表为空时,会抛出NoSuchElementException

  peekLast() 则不会,只是会返回 null

  int indexOf(Object o): 从头遍历找

  int lastIndexOf(Object o): 从尾遍历找

  contains(Object o): 检查对象o是否存在于链表中

  remove() ,removeFirst(),pop(): 删除头节点

  removeLast(),pollLast():removeLast()在链表为空时将抛出NoSuchElementException,而pollLast()方法返回null

  remove(int index):删除指定位置的元素

三、总结

  LinkedList底层的链表结构使它支持高效的插入和删除操作,源码的方法基本上也是插入和删除相关的,这些方法的逻辑基本如下:

  1. 没有指定位置的插入都是在表头或末尾,指定位置的插入需要先判断是否在size内
  2. 删除时指定位置的插入需要先判断是否在size内,并且注意链表为空时,是报错还是返回null

以上是关于Java集合之LinkedList的主要内容,如果未能解决你的问题,请参考以下文章

java集合系列之LinkedList源码分析

Java之集合LinkedList

Java集合源码分析之LinkedList

Java集合之LinkedList

Java集合之LinkedList源码解析

java集合之LinkedList源码分析