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

来源:互联网 发布:操作系统概念-java实现 编辑:程序博客网 时间:2024/05/18 02:40

1、这几种容器的特点

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

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

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

2、标题解惑

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

 First Element (Head)Last Element (Tail) Throws exceptionSpecial valueThrows exceptionSpecial valueInsertaddFirst(e)offerFirst(e)addLast(e)offerLast(e)RemoveremoveFirst()pollFirst()removeLast()pollLast()ExaminegetFirst()peekFirst()getLast()peekLast()

                                                                                       Deque不同返回值的表

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

Stack MethodEquivalent Deque Methodpush(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(后进先出)

增加

  • push(E item)

删除

  • pop()

  • search(Object o)
  • peek()

状态

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

增加

  • add(E e)
  • offer(E e)

删除

  • poll()

  • element()
  • peek()

状态

  • empty()

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

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

优点

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

缺点

  • 按下标查找元素效率低

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

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

0 0
原创粉丝点击