LinkedList的源码

 

 

 

  

LinkedList

LinkedList是通过双向链表去实现的,他的数据结构具有双向链表的优缺点,既然是双向链表,那么的它的顺序访问效率会非常高,而随机访问的效率会比较低,它包含一个非常重要的私有内部静态类:Node

private static class Node<E> {
   E item; // 节点的元素
   Node<E> next; // 下一个节点
   Node<E> prev;  // 上一个节点

   Node(Node<E> prev, E element, Node<E> next) {
       this.item = element;
       this.next = next;
       this.prev = prev;
  }
}

 

get方法:本质上还是遍历链表中的数据

    Node<E> node(int index) {
       // assert isElementIndex(index);
// index 和 长度的一半比较
       if (index < (size >> 1)) {
           Node<E> x = first;
           // 从头开始循环
           for (int i = 0; i < index; i++)
               x = x.next;
           return x;
      } else {
           Node<E> x = last;
           // 从尾部开始循环
           for (int i = size - 1; i > index; i--)
               x = x.prev;
           return x;
      }
  }

 

set方法

public E set(int index, E element) {
   checkElementIndex(index);// 检查下标是否合法
   Node<E> x = node(index); // 根据下标获取对应的node对象
   E oldVal = x.item; // 记录原来的值
   x.item = element; // 赋予新的值
   return oldVal; // 返回修改之前的值
}

 

 

posted @ 2022-01-26 11:05  小白冲  阅读(68)  评论(0编辑  收藏  举报