深入理解容器系列之三--------LinkedList、Stack、Queue、PriorityQueue的总结

时间:2021-11-21 17:55:09

1、这几种容器的特点

  1. 都是按照顺序来存储元素。
  2. 取元素的时候的不同点:

  • LinkedList:按照下标随意取元素
  • Stack:后进先出取元素
  • Queue:先进先出取元素
  • PriorityQueue:按照优先级来取元素

总结:以上四种都是按照顺序来存储元素的,但是就是取元素的时候顺序不一样,这样就把大部分情况都涵盖在里面了,彰显出容器设计的全面性和考虑得很周到。

2、标题解惑

为什么要把这四种容器放在一起呢?理由很简单:Stack、Queue、PriorityQueue这三种容器都可以用LinkedList来实现,当然实际上并不是这样的。但是我们可以用这种方式来归纳和总结。下面是jdk文档的几个表,详情请点击这里

  First Element (Head) Last Element (Tail)
  Throws exception Special value Throws exception Special value
Insert addFirst(e) offerFirst(e) addLast(e) offerLast(e)
Remove removeFirst() pollFirst() removeLast() pollLast()
Examine getFirst() peekFirst() getLast() peekLast()

                                                                                        Deque不同返回值的表

Queue Method Equivalent Deque Method
add(e) addLast(e)
offer(e) offerLast(e)
remove() removeFirst()
poll() pollFirst()
element() getFirst()
peek() peekFirst()
 Queue interface和Deque methods的一些等价的方法

Stack Method Equivalent Deque Method
push(e) addFirst(e)
pop() removeFirst()
peek() peekFirst()
 Stack 和Deque methods的一些等价的方法

从上面的表中我们可以看出,我们可以用Deque的方法来实现Queue和 Stack的功能,而刚刚好的是LinkedList实现了Deque这个接口,

因此LinkedList拥有所有这些方法的实现,LinkedList可以实现Stack、Queue、PriorityQueue。

3、功能

  • LinkedList的主要功能

1、拥有所有ArrayList的功能

2、相比ArrayList,就是扩展了对表头和表尾的操作,由第一个表可知。

  • Stack、Queue、PriorityQueue的功能

这三种容器并不强调对对象的增、删、改、查、遍历等操作,他们强调是的对象进入容器和对象从容器出来时的一种先后关系。

在这里我们就得出了一个结论:如果你的程序强调对元素的增、删、改、查、遍历等操作就用LinkedList或者ArrayList;

如果是强调对象进入容器和对象从容器出来时的先后关系,那就用Stack、Queue、PriorityQueue。下面分别归纳这三种容器的功能。

1、Stack(后进先出)

增加

删除

状态

2、Queue(先进先出),在这里它只是一个接口,一般由LinkedList来实例化它

增加

删除

状态

3、PriorityQueue(按优先级从队列中弹出)

  • 主要是Comparator这个接口的实现,这个在后面跟equal统一总结
4、LinkedList的优劣点(与ArrayList相比)

优点

  • 插入元素效率高
  • 删除元素效率高

缺点

  • 按下标查找元素效率低

注意:Stack、Queue、PriorityQueue不做性能比较,因为他们的主要点对象进入容器和对象从容器出来时的先后关系,即使做性能比较也是看他们用什么来实现,比如说用链表还是用数组,这里不做讨论

原文http://blog.csdn.net/xie389124248/article/details/18303463?utm_source=tuicool&utm_medium=referral