您的位置:首页 > 其它

一步一步解析集合框架LinkedList源码(1)

2016-07-29 17:25 579 查看
我在阅读源码的过程中很多时候是没有头绪的。所以为了避免大家也遇到这种状况,源码不求全求大,做到“透过实践看源码”,分块分层。

LinkedList通常我们称之为链表集合。

首先在介绍LinkedList之前,对链表做一下说明:

大家对机械表的表链不知道还有没有印象,一节一节的?!

表带的最小单位就是”表节“,可拆卸,首位相连。

在java中可以模拟类似的节点。

//链表的底层节点类
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;
}
}


首先构建一个简单的单向链表:

public static void main(String[] args) {
Node<String> first=new Node<String>("第一个节点",null);
Node<String> nex=new Node<String>("第二个节点",null);
Node<String> nex_nex=new Node<String>("第三个节点",null);
first.next=nex;
nex.next=nex_nex;
nex_nex.next=first;
System.out.println(first.item);
System.out.println(first.next.item);
System.out.println(first.next.next.item);
System.out.println(first.next.next.next.item);
}
//链表的底层节点类,私有的内部类
private static class Node<E> {
//节点值
E item;
//节点的下一个关联节点
Node<E> next;

//初始化
Node(E element, Node<E> next) {
this.item = element;
this.next = next;

}
}


运行之后

输出结果:

第一个节点

第二个节点

第三个节点

第一个节点

其次构建一个简单的双向链表

public static void main(String[] args) {
Node<String> first=new Node<String>(null,"第一个节点",null);
Node<String> nex=new Node<String>(null,"第二个节点",null);
Node<String> pre=new Node<String>(null,"第零个节点",null);
first.next=nex;
first.prev=pre;
pre.next=first;
nex.prev=first;
pre.prev=nex;
nex.next=pre;
System.out.println(first.item);
System.out.println(first.next.item);
System.out.println(first.prev.item);
System.out.println(first.next.next.item);
}
//链表的底层节点类,私有的内部类
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;
}
}


运行输出结果:

第一个节点

第二个节点

第零个节点

第零个节点

双向链表可以前后访问,避免单向链表访问最后一个元素需要遍历整个链表的窘状
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: