如何在Java中使用LinkedList

  介绍

本篇文章为大家展示了如何在Java中使用LinkedList,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强>一。定义一个LinkedList

public  static  void  main (String [], args), {   ,List stringList =, new  LinkedList<在();   ,List tempList =, new  ArrayList<在();   ,tempList.add(“牛魔王“);   ,tempList.add(“蛟魔王“);   ,tempList.add(“鹏魔王“);   ,tempList.add(“狮驼王“);   ,tempList.add(“猕猴王“);   ,tempList.add(“禺贼王“);   ,tempList.add(“美猴王“);   ,List stringList2 =, new  LinkedList<祝辞(tempList);   }

上面代码中采用了两种方式来定义LinkedList,可以定义一个空集合,也可以传递已有的集合,将其转化为LinkedList。我们看一下源码

public  class  LinkedList, extends  AbstractSequentialList, implements  List,, Deque,,可克隆,java.io.Serializable {   ,transient  int  size =, 0;/* *   ,* Pointer 用first 节点。   ,*不变:,(first ==, null ,,, last ==, null), | |   ,* (first.prev ==, null ,,, first.item  !=, null)   ,*/,transient  Node;/* *   ,* Pointer 用last 节点。   ,*不变:,(first ==, null ,,, last ==, null), | |   ,* (last.next ==, null ,,, last.item  !=, null)   ,*/,transient  Node去年;/* *   ,* Constructs  an  empty 列表。   ,*/,public  LinkedList (), {   ,}/* *   ,* Constructs  a  list  containing 从而elements  of 从而指定   *大敌;收集、,拷贝,order 活动对象,断开连接;returned  by 从而收集# 39;s   *,迭代器。   ,*   ,* @param  c 从而collection  whose  elements 断开连接;用be  placed  into 却;能够列表   ,* @throws  NullPointerException  if 从而specified  collection  is  null   ,*/,public  LinkedList (Collection<?, extends  E>, c), {   ,();   ,addAll (c);   ,}   }

LinkedList继承了AbstractSequentialList类,实现了列表接口,AbstractSequentialList中已经实现了很多方法,如(int指数),设置(int指数E元素),添加元素(int指数(E)和删除(int指数),这些方法是我们集合操作时使用最多的,不过这些方法在LinkedList中都已经被重写了,而抽象方法在链表中有了具体实现,因此我们回到LinkedList类

<强> LinkedList类中定义了三个变量

大小:集合的长度

第一:双向链表头部节点

:双向链表尾部节点

针对第一次变量和去年变量,我们看到是节点类的实体,这是一个静态内部类,关于静态内部类的讲解,我们在静态五大应用场景一章已经有说明

private  static  class  Node, {   ,E 项目;   ,Node下;   ,Node prev;   ,节点(Node,第二),{=,this.item 元素;=,this.next 下;=,,this.prev  prev;   ,}   }

我们知道LinkedList是通过双向链表实现的,而双向链表就是通过节点类来体现的,类中通过项变量保存了当前节点的值,通过下变量指向下一个节点,通过prev变量指向上一个节点。

<强>二。LinkedList常用方法

<强> 1。get (int指数)

我们知道随机读取元素不是LinkedList所擅长的,读取效率比起ArrayList也低得多,那么我来看一下为什么

public  E 得到(int 指数),{   ,checkElementIndex(指数);   ,return 节点(指数).item;   }/* *   ,*返回一个指定索引的非空节点。   ,*/Node x =,第一;   ,for  (int 小姐:=,0;,小姐:& lt;,指数;,我+ +)=,,x  x.next;   ,return  x;   ,}else  {   ,Node x =,最后;   ,for  (int 小姐:=,size 作用;1;,小姐:祝辞,指数;,我——)=,,x  x.prev;   ,return  x;   ,}   }

从上述代码中我们可以看到得到(int指数)方法是通过节点(int指数)来实现的,它的实现机制是:

比较传入的索引参数指数与集合长度大?2,如果是指数小,那么从第一个顺序循环,直到找到为止,如果指数大,那么从最后一个倒序循环,直到找到为止。也就是说越靠近中间的元素,调用得到(int指数方法遍历的次数越多,效率也就越低,而且随着集合的越来越大,得到(int指数)执行性能也会指数级降低。因此在使用LinkedList的时候,我们不建议使用这种方式读取数据,可以使用列表(),getLast()方法,将直接用到类中的第一个和最后一个变量。

如何在Java中使用LinkedList