java linkedlist二维_JAVA容器-模拟LinkedList实现(双链表)

本文详细探讨了LinkedList的数据结构实现,重点在于双向链表的插入、删除和查询操作。通过实例代码展示了如何使用二分法优化查询效率,并指出LinkedList在Java中是非同步的,不适用于多线程环境,需要通过Collections.synchronizedList()进行同步处理。此外,文章还介绍了LinkedList的基本操作,包括头部、尾部及中间插入,以及删除元素的方法。
摘要由CSDN通过智能技术生成

概述

LinkedList实质上就是双向链表的拓展的实现,我们将关注一下问题。LinkedList

1、双向链表怎么来实现插入、删除、查询?

2、利用二分法提高查询效率。

3、不同步,线程不安全,需要使用Collections.synchronizedList()达到线程安全。

4、简单说,LinkedList就是数据结构中关于数据操作吗?

模拟实现

1、实现总体图(初始状态)

61e8e41b6c967e9caf5c852f13362f55.png

2、论述双链表的实现思想

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。查询即从第一个节点,不断指向下一节点以便获得自己目标节点。删除、插入同理,最后修改目标节点的前后关系即可,就不多论述了。

3、采用二分法,向下遍历节点

1 public Node node(intindex){2 Node temp=first;3     //采用二分法遍历节点

4 if(indexindex;i--){10 temp=temp.getPrevious();11 }12 }13 returntemp;14 }

4、查询

1 public Object get(intindex){2 checkRange(index);3 Node temp=null;4 if(null!=first){5 temp=node(index);6 }7 returntemp.getObj();8 }

5、插入一个元素(头部插入、尾部插入、中间插入)

public void add(intindex,Object obj){

checkRange(index);//移动指针,指向索引位置的节点

Node temp=node(index);//从中间任任意一个位置插入

if(first!=null){//创建一个新节点

Node n=newNode();//修改当前节点的前后节点

Node before=temp.getPrevious();

n.setPrevious(before);

n.setNext(temp);

n.setObj(obj);

before.setNext(n);

temp.setPrevious(n);

}

}

public void add(Object obj){

Node n=new Node();

//如果队头为空从队头插入

if(first==null){

//初始状态:头尾指针指向第一个节点

n.setObj(obj);

n.setPrevious(null);

n.setNext(null);

first=n;

last=n;

}else{//从队尾部插入

n.setObj(obj);

n.setPrevious(last);

n.setNext(null);//上一个实现的next指向下一个节点

last.setNext(n);

last=n;

}

size++;

}

6、删除

1 public void remove(intindex){2 checkRange(index);3 if (null!=first){4 //遍历直到目标节点

5 Node temp=node(index);6 Node befor=temp.getPrevious();7 Node after=temp.getNext();8 after.setPrevious(befor);9 befor.setNext(after);10 size--;11 }12 }

7、源于揭秘LinkedList的核心部分,就没有赘述所有实现的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值