LinkedList的深入理解

linkedlist是一个双向链表结构(像咬着自己尾巴的蛇)。
心得:对链表的理解、位移的操作进一步加深
特点:查找数据时只能按顺序来查询(remove方法中使用了位移>>1一位来判断从头遍历还是尾遍历)

欢迎补充和纠错,3Q

主要是操作内部类new的一个对象header
private transient Entry<E> header = new Entry<E>(null, null, null);
这个内部类Entry<E>中有三个字段
 E element;
 Entry<E> next;
 Entry<E> previous;

header是蛇头,element是值,
next像蛇身(一直延续到蛇尾-蛇头形成一个循环),
previous像蛇尾(一直延续到蛇身-蛇头形成一个循环)

addBefore 添加一个新元素
(创建一个新的Entry<E>并指定上一个元素的下一个指向他的下一个元素和下一个元素的上一个指向他的上一个元素(
e.previous.next = e.next; e.next.previous = e.previous;)
,就是为这个新创建的entry定义一个位置)
remove(Entry<E> e) 将这个e的next和previous都置为空,并维护他的上一个位置与下一个位置的关系
remove(Object)  remove(index)方法最后都是调用remove(Entry<E> e) 
remove(Object) 如果object 为null则选出第一个element为null的元素移除
entry(int index) 这个方法在遍历中会用到(获取只能位置的Entry元素)许多方法都会调用到他(remove,set,get)
clear() 初始化链表,从头部循环到尾部,将每一个entry的next、previous、element置为空最后初始化header
toArray()内部创建了一个object[]并循环为他赋值
toArray(T[] a)这个方法如果a的length小于链表的长度会重新new一个链表长度的a,两个方法是差不多的。
注释也有说明如果toArray(new Object[])是等同于toArray()

我认为核心的和常用的方法就是这几个,其他的方法无非就是调用到了以上的方法
由于时间关系写的不是太详细,大致就这些了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值