Java-----Collection 实现的LinkedList(双向链表)
来源:互联网 发布:淘宝售后处理规则认证 编辑:程序博客网 时间:2024/05/16 01:10
Java—–Collection 实现的LinkedList(双向链表)
Linkedlist,双向链表,优点,增加删除,用时间很短,但是因为没有索引,对索引的操作,比较麻烦,只能循环遍历,但是每次循环的时候,都会先判断一下,这个索引位于链表的前部分还是后部分,每次都会遍历链表的一半 ,而不是全部遍历。
双向链表,都有一个previous和next, 链表最开始的部分都有一个fiest和last 指向第一个元素,和最后一个元素。增加和删除的时候,只需要更改一个previous和next,就可以实现增加和删除,所以说,LinkedList对于数据的删除和增加相当的方便。
熟悉链表算法就知道是什么原因,接下来详细讲解一下链表算法,首先给大家看一下我简单实现的链表node:
class LinkNode<T> { public LinkNode(LinkNode<T> next, LinkNode<T> previous, T obj) { this.next = next; this.previous = previous; this.obj = obj; } private LinkNode<T> next;//下一个节点 private LinkNode<T> previous;//上一个节点 private T obj; /** * 删除节点 */ public void remove() { next.previous = previous; previous.next = next; } /** * 修改节点 */ public void set(T t) { LinkNode<T> link = new LinkNode<T>(next, previous, t); next.previous = link; previous.next = link; } public String toString() { return obj.toString(); } }
从这段代码可以看出:
1、当前对象保存着上一个和下一个对象的引用
private LinkNode<T> next;//下一个节点 private LinkNode<T> previous;//上一个节点
2、remove一个对象(这里有点不好理解,你可以把链表想成一个锁链,形象思维。):
2.1、当前对象的previous对象的next对先指向的当前对象next。
2.2、当前对象的next对象previous指向当前对先previous。
next.previous = previous;//前与后相连 previous.next = next;//后与前相连
这样就实际上把要删除的对象挤出链接里了。
3、set一个对象(理解删除这里就比较好理解):
1、创建一个新对象,这个对象的next和previous与当前对象相同。
2、把this.next.previous指向新创建的对象。
3、把this.previous.next指向新创建的对象。
public void set(T t) { LinkNode<T> link = new LinkNode<T>(next, previous, t);//新对象 next.previous = link;//改变next previous.next = link;//改变previous }
这样这个对象就被替换掉了。
0 0
- Java-----Collection 实现的LinkedList(双向链表)
- [java数据结构]--java双向链表LinkedList的简单实现
- 自己实现Java中基于双向链表的LinkedList
- 双向链表(LinkedList) java实现
- LinkedList,双向链表的实现
- java双向链接表LinkedList的编写模拟实现
- JAVA实现简单的双向LinkedList
- 简单实现 linkedList 双向链表
- 利用双向链表实现LinkedList
- [数据结构]双向链表实现LinkedList
- 简单实现LinkedList(双向链表)
- LinkedList : 双向链表与实现
- Java LinkedList双向链表源码分析
- 简谈JAVA基础--双向链表(LinkedList)
- 双向链表(LinkedList)
- LinkedList 双向链表
- 【java】【java Collection】LinkedList
- LinkedList源码分析:双向循环链表实现
- Kafka深度解析
- 二叉树中插入节点的递归与非递归
- 汇编环境搭建(vs2010(2012)+masm32)
- 如何往服务器中读写数据?
- mysql PacketTooBigException 的处理方式
- Java-----Collection 实现的LinkedList(双向链表)
- 跟我学Shiro
- MongoDB小结34 - 聚合管道【$group】
- elasticsearch源码分析之启动过程(二)
- Barber of the Army of Mages
- 编写Nginx启停服务脚本
- 225. Implement Stack using Queues
- Pattern用法(正则表达式)
- 华为上机题汇总(六)