LinkedList类是List接口的实现类,说明它可以根据索引来随机访问集合中的元素,同时,LinkedList还实现了Deque接口,说明其可以被当作双端队列来使用,并且也可以当做栈来使用。
1.什么是Deque接口。
Deque接口是Queue接口的子接口,它代表一个双端队列,Deque接口中还定义了一些允许从两端来操作队列的方法。
void add First ( Object e ) : 将指定元素插入该双端队列的开头 。
void addLast ( Object e ) : 将指定元素插入该双端队列的末尾。
Object getFirst ( ) : 获取但不删除双端队列的第一个元素系 。
Object getLast ( ) : 获取但不删除双端队列的最后一个元素 。
boolean offerFirst ( Object e ) : 将指定元素插入该双端队列的开头 。
boolean offerLast ( Object e ) : 将指定元素插入该双端队列的末尾。
Object peekFirst ( ) : 获取但不删除该双端队列的第一个元素 ; 如果此双端队列为空 , 则返回 null .
Object peeklast ( ) : 获取但不删除该双端队列的最后一个元素 ; 如果此双端队列为空 , 则返回 null .
Object pop ( ) ( 栈方法 ) : pop 出该双端队列所表示的栈的栈顶元素 。 相当于 removeFirst ( ) 。
void push ( Object e ) : 将一个元素 push 进该双端队列所表示的栈的栈顶 。 相当于addFirst(e).
从上面方法中可以看出 , Deque 不仅可以当成双端队列使用 , 而且可以被当成栈来使用 , 因为该类
里还包含了 pop ( 出栈 ) , push ( 入栈 ) 两个方法。
2.栈和队列的简单了解
栈
栈的修改是按后进先出的原则进行。每次删除的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。
队列
只允许在表的一端front进行插入,而在另一端rear进行删除。
3.LinkedList集合使用简单演示
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
//将字符串元素加入到队列的尾部
list.offer("java");
//将该字符串元素加入到栈的栈的顶部(相当于队列的头部)
list.push("c");
for(String num : list){
System.out.print(num);//输出cjava
}
//将该字符串元素加入到队列头部(相当于栈的顶部)
list.offerFirst("c#");
//访问并不删除队列头部元素
System.out.println(list.peekFirst());//c#
//将栈顶元素弹出栈(相当于删除队列头部元素)
list.pop();
for(String num : list){
System.out.print(num);//输出cjava
}
}
上面的代码演示了linkedlist作为双端队列,栈的用法。
4.LinkedList与ArrayList,Vector的比较
LinkedList和ArrayList的实现机制完全不同,ArrayList,Vector内部以数组的形式来保存集合中的元素,在随机访问集合元素时性能较好,但是LinkedList内部是以链表的形式来保存集合元素,因此在插入,删除元素时性能较好(只需改变指针所指的地址,而数组进行插入删除却需要改变许多角标),但是Vector实现了线程同步,其性能ArrayList还差。