LinkedLIst的实现原理

来源:互联网 发布:用java编写的大型游戏 编辑:程序博客网 时间:2024/06/05 01:07

1、实现方式

  LinkedLIst是基于双向链表实现的 ,所谓的双向链表就是集合中每个元素对象都知道其前一个对象和后一个对象的位置。在LinkedList中,是以一个内部的Entry对象来代表集合中的元素,其中元素的值会赋值给对象的element属性,next属性指向后一个元素,previous指向前一个元素,基于这样的机制可以实现原速度的移动。

 LinkedList()

 在创建LinkedList对象的时候,首先会创建一个element为null ,next为null,previous为null的Entry对象,在执行构造函数的时候,LinkedList会将header的next及previous都指向header,并赋值给全局的header属性,已形成双向链表的闭环。

2、添加元素 add(E)

当向其添加元素的时候,首先会创建一个Entry对象 并将Entry对象的next书香指向header,previous指向header.previous,在完成自己next、previous的设置后,同时将位于当前元素后一个元素的previous指向自己,将当前元素的前一个元素next指向自己。

3,、删除元素 remove(E)

删除元素同样会遍历LinkedList,寻找到匹配的元素之后 ,会将其element、next、previous设置为null完成的对象的删除 ,不比像ArrayList那样复制删除位置之后元素向前移动一位。

4、获得元素get(int index)

由于LinkedList的元素并没有放在数组里,所以在获得元素的时候,会比ArrayList获得的方式要复杂,首先要判断传人的index值是否大于0或者是大于等于当前集合的大小,如果符合会抛出IndexOutOfBoundsException,否则,首先会判断传入的值是否小于集合的一半,如果小于,会从前向后遍历找到对应位置的next元素,若果大于则正好相反的操作。

4包含元素 contains(E)

采用方式是遍历所有的元素,如果传入为null,如找到null的元素就返回true ,否则返回false ,如果传入的不是null,则会equals 如果找到equals的元素返回true,否则返回false。

5、总结

LinkedList是基于双向链表实现的。

添加元素的时候,必须创建一个Entry对象,并切换相应元素的前后元素引用,在查找时候需遍历链表。删除元素的时候也要遍历表,并将相应元素的属性都是设置为null。


0 0
原创粉丝点击