JDK8数据结构链接列表的基础采用双向链表结构
双向链表的特点是第一个节点的prev指向最后一个节点,最后一个节点的next指向第一个节点。 但是没有形成“环”
在链接列表内部,主要有三个属性:节点第一个、节点最后一个和int大小。 每个节点内部都包含节点预预览、节点下一步
add操作将创建一个新节点,该节点的prev指向last,next=null。 如果last==null,则Node设置为first节点。 表名的当前链表是空链表。 否则,将last-next指向其节点。 size 1
移除操作移除有三种方法
remove )默认情况下删除第一个节点。 移除(对象)从第一个节点开始遍历,并找到第一个匹配的节点。 o可以为空。 查找第一个值为null的节点。 remove(intindex )从第一个节点开始遍历,或从末尾节点开始查找下标,按正序或反序查找后,将索引值与size/2进行比较。 找到节点后,直接从链表中删除此节点。
1、如果该节点的prev (前驱)为null,则表示是头节点,将头节点设定为Node-next,如果不是头节点,则设为Node-prev-next=Node-next,表示是当前的Node-next
2、节点的next (后台驱动器)为null时,表示是尾节点,将last设定为Node-prev。 否则,假设Node-prex-next=Node-next,并将当前Node-prev设置为null。
3、将item设置为空,size-1。 此时,删除的节点的item、prev和next都为空。 等待GC回收。---- 面试可问为什么会被回收,何时回收,如何回收
链接列表的优缺点(与阵列列表相比)的优点:
删除操作快
LinkedList是基于链表的数据结构,其地址是任意的(节点之间不需要连续的地址)。 因此,打开内存空间时不需要等待连续的地址
缺点:
由于链接列表需要在查询时移动指针,因此查询操作的性能较低