1.LinkedList底层实现双向链表和双端队列特点
2.可以添加任意元素(元素可以重复),包括null
3.线程不安全,没有实现同步
二。Linkedlist的底层操作机制
1.LinkedList底层维护了一个双向链表。
2.LinkedList中维护两个属性first和last分别指向首节点和尾节点
3.每个节点(Node对象),里面又维护prev,next,item三个属性,其中通过prev指向前一个,通过next指向后一个节点。最终实现双向链表。
4.所以LInkedList的元素添加和删除,不是通过数组完成的,相对来说效率较高
package 集合.List;
public class LinkedList01 {
public static void main(String[] args) {
//模拟简答的双向链表
Node jack = new Node("jack");
Node tom = new Node("tom");
Node yq = new Node("yq");
//连接三个结点,形成双向链表
//jack->tom->yq
jack.next = tom;
tom.next = yq;
//yq->tom->jack
yq.pre = tom;
tom.pre = jack;
Node first = jack;//让first引用指向jack,就是双向链表的头结点
Node last = yq;//让last引用指向yq,就是双向链表的尾节点
//从头到尾进行遍历
System.out.println("***从头到尾进行遍历***");
while(true){
if (first == null){
break;
}
//输出first信息
System.out.println(first);
first= first.next;
}
//从尾到头进行遍历
System.out.println("***从尾到头进行遍历***");
while (true){
if (last == null){
break;
}
//输出last信息
System.out.println(last);
last = last.pre;
}
//双向链表添加对象、数据。
//在tom 和 yq之间插入一个 张三
//先创建一个Node结点,name就是张三
Node zhangSan = new Node("张三");
//下面把张三接入到双向链表
zhangSan.next = yq;
zhangSan.pre=tom;
yq.pre = zhangSan;
tom.next = zhangSan;
//让first再次指向jack
first = jack;
System.out.println("***从头到尾进行遍历***");
while(true){
if (first == null){
break;
}
//输出first信息
System.out.println(first);
first= first.next;
}
//让last再次指向yq
last = yq;
//从尾到头进行遍历
System.out.println("***从尾到头进行遍历***");
while (true){
if (last == null){
break;
}
//输出last信息
System.out.println(last);
last = last.pre;
}
}
}
//定义一个Node 类,Node 对象 表示双向链表的一个结点
class Node{
public Object item;//存放数据
public Node next;//指向后一个结点
public Node pre;//指向前一个结点
public Node (Object name){
this.item = name;
}
@Override
public String toString() {
return "NodeName="+item;
}
}