小白入门数据结构(链表)--LinkedList特点分析--超详细方法源码解读-Day1

大家好我是唐豌豆!这里是每天的源码分析博文:希望对大家有帮助!
LinkedList底层是一个双向链表,首先我们要了解什么是双向链表:
双向链表:是由一系列的存储数据元素的单元通过指针串接起来形成的,有三个域,一个域用于数据元素值(item)的存储,另两个域是指向其他单元的指针(前面指针可称为直接前驱(prev),后面指针可称为直接后继(next))。这里具有一个数据域和多个指针域的存储单元通常称为节点(node)。

说的有点晕吗?别急我画个图就好:
在这里插入图片描述
激动人心的时刻!下面我们正式来分析一下LinkedList的方法源码吧!
LinkedList:
概念:LinkedList是List接口的链表(双向链表)实现类;
用处:它支持实现所有List接口的列表操作,并且允许元素值是任何数据,包括null;
优点:插入、删除元素时效率较高
缺点:由于LikedList结构无下标,需要经过遍历检索值,所有查询值相对ArrayList较慢

下面分析LinkedList的方法get(),知悉LinkedList查询慢的原因:遍历取得元素值所以慢

方法get(int index),从用了node(int index)方法:

  public E get(int index) {
        checkElementIndex(index);
        return node(index).item; //调用node()方法取得元素,
    }

方法node(int index),源码分析,注意要外部查询只能使用get()方法哦!

 /**
     * Returns the (non-null) Node at the specified element index.
     */
    Node<E> node(int index) {  //看完你就懂为啥LinkedList查询慢了
        // assert isElementIndex(index);

        if (index < (size >> 1)) {  //如果给出的index<元素数量的一半
            Node<E> x = first;		//将头元素赋值给x
            for (int i = 0; i < index; i++)	//从0开始遍历,最多遍历到index-1,一共遍历index次
                x = x.next;			//从头向尾找出位置在index的元素,并返回它
            return x;
        } else {
            Node<E> x = last;		//如果给出的index>元素数量的一半
            for (int i = size - 1; i > index; i--)	//从size-1开始遍历至index,一共遍历size-1-index次
                x = x.prev;			//从尾向头找出位置在index的元素,并返回它
            return x;
        }
    }
 

相信博文看下来大家应该对链表,这种数据结构有一定了解了,每天一小段源码分析,不要太长,日日坚持,夯实基础,提升自己才是最好的投资!
如有错误,欢迎指正!

~~END
~唐豌豆

下面是有关数据结构的视频讲解(感兴趣的可以看看):

数据结构核心原理与算法应用

你可能感兴趣的:(java小白入门,数据结构分析)