您的位置:首页 > 编程语言 > Java开发

LinkedList分析

2015-12-27 19:43 671 查看
LinkedList源码分析,基于java1.6和java1.7的分析,由于1.6和1.7在实现上相差比较大,所以对于1.6的分析大家可以参考下以下的一个博文。

########################################################################


参考之前,我先对1.6实现的LinkedList做下简单的介绍。首先呢,LinkedList是基于链表的,这个大家都知道,所以源代码里面肯定维护了一个头指针(不保存数据,方便操作),但是为了检索性能和方便操作的情况下,java1.6实现了的是一个双向的链表,模型大致如下。



然后其余,剩下的也就是对这个双向链表的操作罢了。由于是一个链表结构,所以也就不存在类似于ArrayList的扩容一说。。

########################################################################


http://blog.csdn.net/jzhf2012/article/details/8540543

########################################################################


########################################################################


1. java1.6中LinkedList方法的总结

看完那位博主的讲解其实LinkedList也就那么回事,无非也就是对一个双向链表的操作。

由于LinkedList提供了一些可以使其作为栈、队列、双端队列的方法,下面就对这个方法做个总结。

1.1 add/get/remove系列

这个系列的获取和删除如果不存在是会
抛出异常
的。

1 . 普通方法

boolean add(E e) 和 void add(int index, E element);
E set(int index, E element);
E get(int index);
boolean remove(Object o); 和 E remove(int index);


2 . 带first方法

void addFirst(E e);

E getFirst();
E element(); // 实际调用了getFirst()

E removeFirst();
E remove(); // 实际调用了removeFirst()


3 . 带last方法

void addLast(E e);
E getLast();
E removeLast();


1.2 offer/peek/poll系列

这个系列的获取和删除如果不存在则返回
null


1 . 普通方法

boolean offer(E e);
E peek(); // 获取第一个
E poll(); // 删除并返回第一个


2 . 带first方法

boolean offerFirst(E e);
E peekFirst();
E pollFirst();


3 . 带last方法

boolean offerLast(E e);
E peekLast();
E pollLast();


1.3 pop/push系列

void push(E e); // 实际是addFirst();
E pop(); // 实际是removeFirst();不存在会抛出异常


2. java1.7分析

其实要是弄明白了1.6中的LinkedList,其实1.7也没有多大的难度,无非也就是改变了实现的方式。在java1.7中,取消了header的指针,而是维护了一个first指针和一个last指针,这两个指针都是存放数据的,模型如下。



这里的first就是e1元素,last就是e3元素。java1.7也取消了Entry类作为链表的载体,而采用了Node类,基本和Entry大同小异。

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;
}
}


剩下来的方法操作跟原来的也就基本差不多,无非也就是同时维护了两个指针更方便于操作罢了。。。

比较1.6和1.7的源码在原理差不多查询,1.7只是改变了原来的双向链表的实现方式。。。大家加油。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java linkedlist 源码