本篇文章为大家展示了如何在Java中使用LinkedList,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强>一。定义一个LinkedList 强>
public static void main (String [], args), { ,ListstringList =, 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; }/* * ,*返回一个指定索引的非空节点。 ,*/Nodex =,第一; ,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