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

1、这几种容器的特点

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

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

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

2、标题解惑

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

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

                                                                                        Deque不同返回值的表

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

Stack MethodEquivalent 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值